WordPressでJSON-LD形式の構造化データを出力する

WordPress で、schema.org の構造化データを JSON-LD 形式(JSON for Linking Data)で出力する方法、の自分用メモです。
構造化データは、WordPress のプラグイン検索画面で「schema」と検索すると出てくるプラグインで簡単に出力することが可能です。
また、「All in One SEO Pack」の Schema.org マークアップ機能をONしても出力できるのですが、なんとなーく構造化データは自前でコントロールしたい、ということで、function.php から自前で出力することにしました。
ソースはこんな感じ。
function insert_json_ld (){
global $post;
$post_data = $post;
$category = get_the_category();
$payload["@context"] = "http://schema.org/";
// JSON-LD for every signle article page.
if (is_single()) {
$author_data = get_userdata($post_data->post_author);
$post_url = get_permalink();
$post_thumb = wp_get_attachment_url(get_post_thumbnail_id($post->ID));
$payload["@type"] = "Article";
$payload["url"] = $post_url;
$payload["author"] = array(
"@type" => "Person",
"name" => $author_data->display_name,
);
$payload["headline"] = $post_data->post_title;
$payload["datePublished"] = $post_data->post_date;
$payload["image"] = $post_thumb;
$payload["articleSection"] = $category[0]->cat_name;
$payload["publisher"] = "TeraDas";
}
// JSON-LD for front page.
if ( is_front_page() ) {
$payload["@type"] = "Organization";
$payload["name"] = "TeraDas";
$payload["logo"] = "http://www.example.com/Logo.png";
$payload["url"] = "http://www.example.com/";
$payload["sameAs"] = array(
"https://twitter.com/teradas",
"https://www.facebook.com/TeraDas.net"
);
$payload["contactPoint"] = array(
array(
"@type" => "ContactPoint",
"telephone" => "+81 00 0000 0000",
"email" => "sales@example.com",
"contactType" => "sales"
)
);
}
// JSON-LD for author pages.
if ( is_author() ) {
$author_data = get_userdata($post_data->post_author);
$twitter_url = get_the_author_meta('twitter');
$website_url = get_the_author_meta('url');
$facebook_url = get_the_author_meta('facebook');
$payload["@type"] = "Person";
$payload["name"] = $author_data->display_name;
// $payload["email"] = $author_data->user_email;
$payload["sameAs"] = array(
$twitter_url, $website_url, $facebook_url, $gplus_url
);
}
echo '<script type="application/ld+json">'.json_encode($payload).'</script>';
}
add_action('wp_footer','insert_json_ld');
single、front_page、author それぞれについて異なる構造化データを出力します。
フィルタでフッタに JSON-LD 形式で構造化データを挿入しています。
各項目については、各自の環境にあわせて精査したほうがよいでしょう。
最後に Google の 構造化データテストツール での確認もお忘れなく。
コメントを記入