WordPressの投稿画面の右側にある、カテゴリの設定欄でひとつ以上のカテゴリを追加すると、メイン、メインにする、というオプションが現れる。
これは、Wordpress 標準の機能ではなく、Yoast SEO プラグインの機能である。
ここで所属する3つのカテゴリうちのひとつをメインにするとどうなるのか?
そのままでは、投稿上のパンくずリストのカテゴリ名にメインカテゴリが表示されるわけではない。
記事の所属カテゴリリストを全部表示した時に、メインカテゴリから順番に表示されるわけではない。その記事のカテゴリ別の人気記事をリストする時に、メインカテゴリが採用されずに、サブカテゴリとして付加したつもりのカテゴリで記事がリストアップされる。
WordPress の標準では、カテゴリを創設した順番に上から優先に表示されるようになっている。
記事内でメインカテゴリーを表示する方法
これらのすべてでメインカテゴリとして活躍してもらうためには、Yoast 式のパンくずリストを採用し、メインカテゴリを表示したいところに次のコードを挿入する必要がある。
カテゴリーリストのページへのリンク付きのメインカテゴリ名が表示される。
<?php
// SHOW YOAST PRIMARY category, OR FIRST category
$category = get_the_category();
$useLink = true;
// If post has a category assigned.
if ($category){
$category_display = '';
$category_link = '';
if ( class_exists('WPSEO_Primary_Term') )
{
// Show the post's 'Primary' category, if this Yoast feature is available, & one is set
$wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() );
$wpseo_primary_term = $wpseo_primary_term->get_primary_term();
$term = get_term( $wpseo_primary_term );
if (is_wp_error($term)) {
// Default to first category (not Yoast) if an error is returned
$category_display = $category[0]->name;
$category_link = get_category_link( $category[0]->term_id );
} else {
// Yoast Primary category
$category_display = $term->name;
$category_link = get_category_link( $term->term_id );
}
}
else {
// Default, display the first category in WP's list of assigned egories
$category_display = $category[0]->name;
$category_link = get_category_link( $category[0]->term_id );
}
// Display category
if ( !empty($category_display) ){
if ( $useLink == true && !empty($category_link) ){
echo '<span class="-name">';
echo '<a href="'.$category_link.'">'.htmlspecialchars($category_display).'</a>';
echo '</span>';
} else {
echo '<span class="-name">'.htmlspecialchars($category_display).'</span>';
}
}
}
?>
これでメインカテゴリーが表示される。
$useLink = true;
true : カテゴリーへのリンクが生成される。
false: リンクなしのカテゴリー名
パンくずリストにメインカテゴリーを表示する方法
パンくずリストは、
Yoast の設定→ 高度な設定
で、パンくずリストを有効にする必要がある。
そして、パンくずリストを表示したい場所に、次のコードを挿入する。
single.php など
<?php if ( function_exists('yoast_breadcrumb') ) { yoast_breadcrumb(' <p id="breadcrumbs">','</p> '); } ?>
メインカテゴリのカテゴリ名とリンクではなく、リンクなしのカテゴリ名だけを表示するには,
$useLink = false;
にする。
これでサブカテゴリではなく、メインカテゴリが生きる。
Function 化
次のコードをfunctions.php に追加する。
/* // SHOW YOAST PRIMARY CATEGORY, OR FIRST CATEGORY <?php echo get_primary_category(get_the_ID());?> // <?php echo '<pre>'.print_r(get_primary_category(get_the_ID()), true).'</pre>'; ?> */ function get_primary_category( $post = 0 ) { if ( ! $post ) { $post = get_the_ID(); } $category = get_the_category( $post ); $primary_category = array(); // If post has a category assigned. if ($category){ $category_display = ''; $category_slug = ''; $category_link = ''; $category_id = ''; if ( class_exists('WPSEO_Primary_Term') ) { // Show the post's 'Primary' category, if this Yoast feature is available, & one is set $wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id( $post ) ); $wpseo_primary_term = $wpseo_primary_term->get_primary_term(); $term = get_term( $wpseo_primary_term ); if (is_wp_error($term)) { // Default to first category (not Yoast) if an error is returned $category_display = $category[0]->name; $category_slug = $category[0]->slug; $category_link = get_category_link( $category[0]->term_id ); $category_id = $category[0]->term_id; } else { // Yoast Primary category $category_display = $term->name; $category_slug = $term->slug; $category_link = get_category_link( $term->term_id ); $category_id = $term->term_id; } } else { // Default, display the first category in WP's list of assigned categories $category_display = $category[0]->name; $category_slug = $category[0]->slug; $category_link = get_category_link( $category[0]->term_id ); $category_id = $term->term_id; } $primary_category['url'] = $category_link; $primary_category['slug'] = $category_slug; $primary_category['title'] = $category_display; $primary_category['id'] = $category_id; } return $category_display; }
return $category_display;
のところに、
$category_slugにすると、slug
$category_id にすると、id
$category_display にすると、カテゴリー名
$category_link にすると、 URL
が返される。
メインカテゴリーを表示したいところに、次のように記述する。
<?php echo get_primary_category(get_the_ID());?>
Rank Math SEO を使用する場合
Yoast SEO プラグインの代わりに Rank Math SEO を使用することもできる。
次のコードで、メインカテゴリーのID, Slug, Name が表示される。
<?php
$primary_cat_id = get_post_meta( get_the_ID(), 'rank_math_primary_category', true );
echo $primary_cat_id;
$cat = get_category($primary_cat_id);
$cat_slug = $cat->slug;
$cat_name = $cat->name;
echo $cat_slug;
echo $cat_name;
?>