WordPressテーマSANGOの質問

パンくずリストの構造化マークアップについて

アバター
ぽーと

お世話になります。

https://saruwakakun.com/sango/comments?id=5901

上記URLの【個別記事でも「ホーム→カテゴリー名→記事タイトル名」といった表記でパンくずリストを表示する】につきまして、ページのタイトルまで構造化マークアップを適用したく質問いたしました。

具体的には、以下のようになっているものを
<span style="font-size: 0.9em; color: gray;">記事タイトル</span>

以下のように変更したいです。
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name" style="font-size: 0.9em; color: gray;">記事タイトル</span><meta itemprop="position" content="●数字●" /></li>

特に、以下のcontent=”●数字●”の部分を、リストの数に応じて変動させたいのですが、やり方が分からず・・・。
<meta itemprop="position" content="●数字●" />

例)パンくずが
HOME>親カテゴリ>記事タイトル
の場合はcontent=”3″

HOME>親カテゴリ>子カテゴリ>記事タイトル
の場合はcontent=”4″  と入れたい。

可能であれば、やり方をご教示いただけますでしょうか?
よろしくお願いいたします。

SANGO
SANGO 質問ガイドライン
コメントへの回答
サルワカくん
サルワカくん
2020/09/02

回答が遅くなり失礼しました。
カスタマイズのコードのうち、$result = から始まる行を以下のようにすればイメージどおりになるのではないかと思います。

  $result .= '<span style="font-size: 0.9em; color: gray;">'.get_the_title($post->ID).'</span><meta itemprop="position" content="' . i . '" />';

ご確認よろしくお願いします。

アバター
XOXO
2021/01/28

https://saruwakakun.com/sango/comments?id=8671
こちらにて回答に、
>>カスタマイズのコードのうち、$result = から始まる行を以下のようにすればイメージどおりになるのではないかと思います。
とありますが、$result =の箇所が3カ所ありどこをどう変更すればよいのか追加回答いただけたりしますでしょうか…

複数パターン試しましたが、うまくできず…

サルワカくん
サルワカくん
2021/01/28

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

以下のように子テーマで関数を上書きしていただくことで期待した結果になると思いますがいかがでしょうか?
よろしくお願いします。


function sng_get_bc_single() {
  global $post;
  $categories = get_the_category($post->ID);
  if(!$categories) return '';
  $cat = $categories[0];
  $result = '';
  $i = 2;
  if ($cat->parent != 0) {
    $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
    foreach ($ancestors as $ancestor) {
      $result .= sng_bc_item(esc_attr(get_cat_name($ancestor)), esc_url(get_category_link($ancestor)), $i);
      $i++;
    }
  }
  $result .= sng_bc_item(esc_attr($cat->cat_name), esc_url(get_category_link($cat->term_id)), $i);
  // その記事自身のタイトルを表示する
  $result .= '
  • '.get_the_title($post->ID).'
  • '; return $result; } function sng_get_bc_page() { global $post; $result = ""; $i = 2; if ($post->post_parent == 0) { $ancestors = array_reverse(get_post_ancestors($post->ID)); $result = ''; foreach ($ancestors as $ancestor) { $result .= sng_bc_item(esc_attr(get_the_title($ancestor)), esc_url(get_permalink($ancestor)), $i); $i++; } } $result .= '
  • '.get_the_title($post->ID).'
  • '; return $result; }
    アバター
    XOXO
    2021/01/30

    ご回答こちらもありがとうございます!

    頂いたコードを、子テーマのfuncitonに追記しましたが、
    3階層目に位置する子記事に入ると、
    ・今まで:HOME>親記事(カテゴリー)
    ・修正後:HOME>子記事
    となってしまいます…
    実装したいのは以下の形です。
    ・理想:HOME>親記事(カテゴリー)>子記事

    ※子記事が、記事名ということです。

    サルワカくん
    サルワカくん
    2021/01/31

    お世話になっております。

    そういうことですね。
    正しく理解できておらず申し訳ありません。

    子テーマで定義されているsng_get_bc_single関数の$cat = $categories[0]と書かれているコードを$cat = $categories[count($categories) - 1];に変更してみていただけませんでしょうか?

    よろしくお願いします。

    アバター
    XOXO
    2021/01/31

    ご回答ありがとうございます。
    固定ページは希望通りになったのですが、
    投稿記事はどうすればよろしいでしょうか。

    また、今回教えていただいた方法では、見た目上は
    ・HOME>親>子
    となっていますが、
    リッチリザルトテストの構造化マークアップ(パンくずリスト)は変わらず、
    ・HOME>親
    までとなっています…これだとSEOには何の意味もなく…

    なので、
    ・固定ページ
    ・投稿記事
    ともに、見た目&構造化上も、
    ・HOME>親>子
    となるようにできないでしょうか。

    サルワカくん
    サルワカくん
    2021/02/01

    お世話になっております。
    お返事が遅くなってしまい申し訳ありません。
    なお、PHPのカスタマイズに関するサポートは基本的には行っていませんのでご了承ください。
    以下のカスタマイズでいかがでしょうか?
    よろしくお願いします。

    
    function sng_get_bc_single() {
      global $post;
      $categories = get_the_category($post->ID);
      if(!$categories) return '';
      $cat = $categories[count($categories) - 1];
      $result = '';
      $i = 2;
      if ($cat->parent != 0) {
        $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
        foreach ($ancestors as $ancestor) {
          $result .= sng_bc_item(esc_attr(get_cat_name($ancestor)), esc_url(get_category_link($ancestor)), $i);
          $i++;
        }
      }
      $result .= sng_bc_item(esc_attr($cat->cat_name), esc_url(get_category_link($cat->term_id)), $i);
      // その記事自身のタイトルを表示する
      $pos = $i + 1;
      $result .= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span style="font-size: 0.9em; color: gray;">'.get_the_title($post->ID).'</span><meta itemprop="position" content="' . $pos . '" /></li>';
      return $result;
    }
    
    function sng_get_bc_page() {
      global $post;
      $result = "";
      $i = 2;
      if ($post->post_parent == 0) {
        $ancestors = array_reverse(get_post_ancestors($post->ID));
        $result = '';
        foreach ($ancestors as $ancestor) {
          $result .= sng_bc_item(esc_attr(get_the_title($ancestor)), esc_url(get_permalink($ancestor)), $i);
          $i++;
        }
      }
      $result .= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span style="font-size: 0.9em; color: gray;">'.get_the_title($post->ID).'</span><meta itemprop="position" content="' . $i . '" /></li>';
      return $result;
    }
    
    アバター
    宮城島広夢
    2021/02/01

    PHP対応外だったのですね。
    申し訳ございません。

    頂いた内容ですが、
    それですと、
    ・固定ページでは正しく表示されない
    ・リッチリザルトテストではエラーになる
    という状況です。

    ただ、これ以上聞くのもあれなので、一旦諦めます><
    ご対応いただいたのに申し訳ございません。

    サルワカくん
    サルワカくん
    2021/02/03

    お世話になっております。

    ちなみに、固定ページでどの様に表示されるか、また、リッチリザルトのテスト結果を送っていただくことはできますでしょうか?

    よろしくお願いします。

    アバター
    XOXO
    2021/02/03

    エラー画面などのスクショ共有承知しました。

    ただ、このコメントだと添付ができないようですが、
    どのように共有すればよいでしょうか。

    また、お手数ですが、こちらの件も「今回のパンくず同様」All in one seoを止めるための内容ですので、ご回答いただけますと幸いです。
    https://saruwakakun.com/sango/comments?id=9785

    サルワカくん
    サルワカくん
    2021/02/03

    お世話になっております。

    承知しました。
    こちらのリンクからお問い合わせいただけますでしょうか?
    よろしくお願いします。

    https://saruwakakun.com/sango/contact

    アバター
    XOXO
    2021/02/09

    遅くなりましたが、パンくずについていただいたPHPを実際にした際のエラー画面報告いたしました。

    All in one seo廃止のための以下の修正方法教えていただけますでしょうか
    https://saruwakakun.com/sango/comments?id=9785