Schema Markup for Display Posts Shortcode

<?php
/**
* Schema Markup for Display Posts Shortcode
* @author Bill Erickson
* @see https://www.billerickson.net/code/schema-markup-display-posts-shortcode
*
* @param string $open_markup
* @param array $atts, shortcode attributes
* @param object $loop
* @return string
*/
function ea_dps_schema( $open_markup, $atts, $loop ) {
$json = ea_json_summary_markup( $loop );
return $json . $open_markup;
}
add_filter( 'display_posts_shortcode_wrapper_open', 'ea_dps_schema', 40, 3 );
/**
* JSON Summary Markup
* @see https://developers.google.com/search/docs/guides/mark-up-listings#summary-page--multiple-full-details-pages
*
*/
function ea_json_summary_markup( $loop = false ) {
global $wp_query;
$loop = empty( $loop ) ? $wp_query : $loop;
if( ! $loop->have_posts() )
return;
$output = array();
foreach( $loop->posts as $i => $post ) {
$position = $i + 1;
$output [] = '{
"@type":"ListItem",
"position":' . $position . ',
"url":"' . get_permalink( $post->ID ) . '"
}';
}
return '<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"ItemList",
"itemListElement":[' . join( ',', $output ) . ']
}
</script>';
}
view raw functions.php hosted with ❤ by GitHub

Bill Erickson

Bill Erickson is a freelance WordPress developer and a contributing developer to the Genesis framework. For the past 14 years he has worked with attorneys, publishers, corporations, and non-profits, building custom websites tailored to their needs and goals.

Ready to upgrade your website?

I build custom WordPress websites that look great and are easy to manage.

Let's Talk