こうして、[Post – 記事投稿]をメインとしているのだから、当然、記事リストやシングルページでも、メインのカテゴリーを表示(もしくは全カテゴリーを表示)されるでしょう。普通は…
と思っていたのですが、ところが実際は →
あれれ、メインカテゴリーじゃない
しかも、指摘されるまでず〜っと気がついていなかった(;´Д`)
さらにさらに、これってWordPressの標準の機能だとばかり思っていたら、なんと、Yoast SEO プラグインの機能だったんですねぇ
で、一般的にテンプレートでは、最初のカテゴリーを表示させるようにしていることが多いので、いくらメインを設定していても無視されていたのでした。
例えば、テーマ内でこんなふうに書かれています
$terms = get_the_terms( get_the_ID(), $taxonomy ); $term_url = esc_url( get_term_link( $terms[0]->term_id, $taxonomy ) ); $term_name = esc_html( $terms[0]->name ); echo '<span class="entry-meta_items entry-meta_items_term"><a href="' . $term_url . '" class="btn btn-xs btn-primary"' . '>' . $term_name . '</a></span>';
これだと、$terms[0]->term_id と最初のカテゴリーを見ているので、(WordPressでは登録順に設定されてしまうため)いくらメインを設定しても反映されないわけです。
Yoast SEO には、WPSEO_Primary_Term()なんて関数が用意されているので、それを使って以下の様に(あくまで一例です)書き換えてやればメインカテゴリーが表示されるようになります。
$primarycat = new WPSEO_Primary_Term('category', get_the_ID()); $primarycat = $primarycat->get_primary_term(); $terms = get_the_terms( get_the_ID(), $taxonomy ); $term_url = esc_url( get_category_link( $primarycat ) ); $category = get_category($primarycat); $term_name = $category->cat_name; echo '<span class="entry-meta_items entry-meta_items_term"><a href="' . $term_url . '" class="btn btn-xs btn-primary"' . '>' . $term_name . '</a></span>';
あとは、パンくずについても修正する必要があるかもしれませんね。