I have managed to get the Article (BlogPosting) Schema.Org workingg.
Paste this in a file called “json-ld.php” (You will probs need to create it.)
<?php
function get_post_data() {
global $post;
return $post;
}
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches[1][0];
if(empty($first_img)) {
$first_img = "ENTER A DEFAULT IMAGE HERE";
}
return $first_img;
}
function word_count() {
$content = get_post_field( 'post_content', $post->ID );
$word_count = str_word_count( strip_tags( $content ) );
return $word_count;
}
function comma_tags($tags, $show_links = true)
{
if($tags)
{
$t = array();
foreach($tags as $tag)
{
$t[] = (!$show_links) ? $tag->name : '<a href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a>';
}
return implode(", ", $t);
}
else
{
return false;
}
}
// stuff for any page
$payload["@context"] = "https://schema.org/";
// this has all the data of the post/page etc
$post_data = get_post_data();
// stuff for any page, if it exists
$category = get_the_category();
// stuff for specific pages
if (is_single() || is_singular()) {
// this gets the data for the user who wrote that particular item
$author_data = get_userdata($post_data->post_author);
$post_url = get_permalink();
$post_thumb = get_post_thumbnail_id($post->ID);
$payload["@type"] = "BlogPosting";
$payload["url"] = $post_url;
$payload["author"] = array(
"@type" => "Person",
"name" => $author_data->display_name,
);
$payload["headline"] = $post_data->post_title;
$payload["datePublished"] = get_the_date("Y-m-d");
$payload["datePublished"] = get_the_date("Y-m-d");
$payload["dateModified"] = get_the_modified_date("Y-m-d");
$payload["wordCount"] = word_count();
$payload["creator"] = array(
"@type" => "Person",
"name" => $author_data->display_name,
);
$payload["keywords"] = comma_tags(get_the_tags(), false);
$img_url = catch_that_image();
$imgdata = getimagesize($img_url);
$width = $imgdata[0];
$height = $imgdata[1];
$payload["image"] = array(
"@type" => "ImageObject",
"url" => $img_url,
"height" => $height,
"width" => $width
);
$payload["mainEntityOfPage"] = array(
"@type" => "WebPage",
"@id" => $post_url
);
$payload["ArticleSection"] = $category[0]->cat_name;
$payload["Publisher"] =
array(
"@type" => "Organization",
"name" => "ENTER ORGANIZATION NAME",
"logo" => array(
"@type" => "ImageObject",
"url" => "ENTER ORGANIZATION LOGO"
)
);
}
if (is_front_page()) {
$payload["@type"] = "Organization";
$payload["name"] = "Depression For Teens";
$payload["logo"] = "ENTER ORGANIZATION LOGO HERE";
$payload["url"] = "ENTER YOUR URL HERE";
$payload["sameAs"] = array(
"https://twitter.com/xxxxxxxxxxxxxxx",
"https://www.facebook.com/xxxxxxxxxxxxxxx",
"https://plus.google.com/xxxxxxxxxxxxxxx"
);
$payload["contactPoint"] = array(
array(
"@type" => "ContactPoint",
"telephone" => "xxxxxxxxxxxxxxx",
"email" => "xxxxxxxxxxxxxxx"
)
);
}
if (is_author()) {
// this gets the data for the user who wrote that particular item
$author_data = get_userdata($post_data->post_author);
// some of you may not have all of these data points in your user profiles - delete as appropriate
// fetch twitter from author meta and concatenate with full twitter URL
$twitter_url = " https://twitter.com/";
$twitterHandle = get_the_author_meta('twitter');
$twitterHandleURL = $twitter_url . $twitterHandle;
$websiteHandle = get_the_author_meta('url');
$facebookHandle = get_the_author_meta('facebook');
$gplusHandle = get_the_author_meta('googleplus');
$payload["@type"] = "Person";
$payload["name"] = $author_data->display_name;
$payload["email"] = $author_data->user_email;
$payload["sameAs"] = array(
$twitterHandleURL, $websiteHandle, $facebookHandle, $gplusHandle
);
}
You will need to handle the customisations EG (Oragnization details etc.) but that should work.
After you have made that file place the following before the </head>
in the header.php file for your theme (preferably child theme)
<?php include('json-ld.php'); ?>
<script type="application/ld+json"><?php echo json_encode($payload); ?></script>
I am still having issues with the breadcrumb though.