いつもお世話になっております。
wordpressのthemeに構造化データを設定したいのですが、
アーカイブページ(記事一覧ページ)などにも構造化データを設定したい場合
どのように記述すればよいかわからずにおります。
##発生している問題
記事一覧ページで構造化データが
ループで出力された記事情報分、複数出力されてしまいます。
##現在のコード
function insert_json_ld_for_schema_org() { //サイトのロゴ画像 $logo = array( '@type' => 'ImageObject', 'url' => get_template_directory_uri() . '/screenshot.png', 'width' => '240', 'height' => '80' ); while (have_posts()) { the_post(); $category_info = get_the_category(); if( count($category_info) > 1 ) { $articleSection = array(); foreach( $category_info as $ct ) { $articleSection[] = $ct->name; } } else { $articleSection = $category_info[0]->name; } //添付画像を取得 $attachments = get_children( array( 'post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image') ); $images = array(); foreach($attachments as $image) { $src = wp_get_attachment_image_src( $image->ID, 'medium' ); $images[] = array( '@type' => 'ImageObject', 'url' => $src[0], 'width' => strval($src[1]), 'height' => strval($src[2]) ); } //添付画像が無い場合はアイキャッチ画像を取得 if( !count($images) ) { if( has_post_thumbnail() ) { $thumbnail_id = get_post_thumbnail_id(); $src = wp_get_attachment_image_src( $thumbnail_id , 'medium' ); $images = array( '@type' => 'ImageObject', 'url' => $src[0], 'width' => strval($src[1]), 'height' => strval($src[2]) ); } else { //それも無い場合はロゴ画像をセット $images = $logo; } } if( is_home() || is_front_page() ) { $data = array( '@context' => 'http://schema.org', '@type' => 'WebSite', 'headline' => get_the_title(), 'author' => array( '@type' => 'Person', 'name' => get_the_author_meta('display_name'), ), 'datePublished' => get_the_date('Y-m-d'), 'dateModified' => get_the_modified_time( 'Y-m-d' ), 'articleSection' => $articleSection, 'url' => get_permalink(), 'mainEntityOfPage' => array( '@type' => 'WebPage', '@id' => get_permalink(), ), 'publisher' => array( '@type' => 'Organization', 'name' => get_bloginfo('name'), 'logo' => $logo, ), 'image' => $images, ); } elseif( is_single() || is_page() ) { $data = array( '@context' => 'http://schema.org', '@type' => 'Article', 'headline' => get_the_title(), 'author' => array( '@type' => 'Person', 'name' => get_the_author_meta('display_name'), ), 'datePublished' => get_the_date('Y-m-d'), 'dateModified' => get_the_modified_time( 'Y-m-d' ), 'articleSection' => $articleSection, 'url' => get_permalink(), 'mainEntityOfPage' => array( '@type' => 'WebPage', '@id' => get_permalink(), ), 'publisher' => array( '@type' => 'Organization', 'name' => get_bloginfo('name'), 'logo' => $logo, ), 'image' => $images, ); } echo '<script type="application/ld+json">' .json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT) .'</script>'.PHP_EOL; } rewind_posts(); } add_action('wp_head','insert_json_ld_for_schema_org');
##教授いただきたい点
記事一覧ページで
「その記事一覧ページそのものの情報」を構造化データとして出力するためにはどのように記述すると良いかご教授いただけないでしょうか。
まとめた記事すべての情報が出力されるのは
have_posts で出力していることが理由だと思うのですが、
どのように記述すればよいのかわからず悩んでいます。
ネットでも色々と調べたのですが、
フロントページや投稿、固定ページに表示させる書き方はあるのですが、
まとめページ用に表示させる方法がなかなか見つけられずにおりました。
##記事一覧に出力したい構造化データ
ターム名(そのページのカテゴリ名)と
そのページのURLを表示させるようにしたいです。
'@context' => 'http://schema.org', '@type' => 'LocalBusiness', 'name' => single_term_title( '' , $display = false ), //ターム名 'url' => get_term_link( $term_id, $taxonomy_name ), //表示しているタームアーカイブページのリンクURL 'mainEntityOfPage' => array( '@type' => 'WebPage', '@id' => get_permalink(), ), 'publisher' => array( '@type' => 'Organization', 'name' => get_bloginfo('name'), 'logo' => $logo, ), 'image' => $images, );
どうぞよろしくおねがいします。
あなたの回答
tips
プレビュー