WordPressテーマSANGOの質問

パンくずリストの表示について

アバター
マクリン

個別記事では問題ないのですが、カテゴリーページでパンくずリストを見たときに「親カテゴリー」までしか表示されません。

・親カテゴリーページの場合→「ホーム」のみ表示
・子カテゴリーページの場合→「親カテゴリー」まで表示

こちらをそのカテゴリー自身もパンくずリストに表示されるようにしたいのですが、カスタマイズが可能でしたら、ご教示よろしくお願いいたします。

SANGO
質問板アーカイブ
コメントへの回答
サルワカくん
サルワカくん
2020/01/09

子テーマのfunctions.phpに以下のコードを貼り付けると、カテゴリーのパンくずリストに、そのカテゴリー自身も含まれるようになると思います。

/**
 * カテゴリーのパンくずリストで、現在のカテゴリーも含める
 */
function sng_get_bc_category() {
  $cat = get_queried_object();
  $result = '';
  $raw_ancestors = get_ancestors($cat->cat_ID, 'category');
  $ancestors_count = count($raw_ancestors);
  if($raw_ancestors) {
    $ancestors = array_reverse($raw_ancestors);
    $i = 2;
    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->name), "", $ancestors_count + 2);
  return $result;
}

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

アバター
マクリン 
2020/01/10

ありがとうございます!

もう1点可能でしたら、ご依頼があります。

個別記事でも「ホーム→カテゴリー名→記事タイトル名」といった表記でパンくずリストを表示することが可能でしたら、こちらもご教示よろしくお願いいたします。

サルワカくん
サルワカくん
2020/01/11

バージョン2.0以降であれば、以下のようなコードを子テーマのfunctions.phpに貼り付けることで、投稿ページのパンくずリストにそのページのタイトルを表示できます。
ただし、SEO的な効果は期待できないこと、パンくずリストのすぐ下に同タイトルが表示されていることから、あまりおすすめはしません。

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 .= '<span style="font-size: 0.9em; color: gray;">'.get_the_title($post->ID).'</span>';
  return $result;
}

固定ページのパンくずリストにも同様にタイトルまで表示するためには以下のコードを貼り付けます。

function sng_get_bc_page() {
  global $post;
  $result = "";
  if ($post->post_parent == 0) {
    $ancestors = array_reverse(get_post_ancestors($post->ID));
    $i = 2;
    $result = '';
    foreach ($ancestors as $ancestor) {
      $result .= sng_bc_item(esc_attr(get_the_title($ancestor)), esc_url(get_permalink($ancestor)), $i);
      $i++;
    }
  }
  $result .= '<span style="font-size: 0.9em; color: gray;">'.get_the_title($post->ID).'</span>';
  return $result;
}

よろしくお願いします。