ページ内目次

こっちをメインって言ったよね なんでメインじゃないカテゴリーが表示されるの!?(●`ε´●)

 

こうして、[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>';

あとは、パンくずについても修正する必要があるかもしれませんね。

↑上へまいりま〜す