質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

0回答

1473閲覧

Wordpresに「記事一覧(archives.phpなど)」に対応した構造化データを設定する方法

Novz

総合スコア22

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/03/20 01:22

編集2020/03/20 03:30

いつもお世話になっております。

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, );

どうぞよろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/03/20 01:37 編集

> その記事一覧ページそのものの情報 とは、どのようなデータを出力したいのか希望している具体的なデータ例を質問に記載できないでしょうか?
Novz

2020/03/20 03:25

承知しました。ご指摘ありがとうございます。追記します。
marlboro_tata

2020/03/20 04:53

メインループ外で(have_posts()でまわすループを使わないで)、ページのクエリ関係の情報を取得できれば、なんとかなると思うので、get queried object()関数が使えそうな気がします。 <?php $queried_object = get_queried_object(); var_dump( $queried_object ); ?> archive.php に上記を記載して、ダンプされた中身から、必要な情報を拾い出せるのではないかと。 ちなみに、get queried object()関数自体はシングルページでも使えます。 https://wpdocs.osdn.jp/関数リファレンス/get_queried_object 公式の情報が貧相なので、実際にどんな値が取れるかは、var_dump()で書き出してみて確かめる感じになるかと。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問