WordPressの投稿画面の右側にある、カテゴリの設定欄でひとつ以上のカテゴリを追加すると、メイン、メインにする、というオプションが現れる。

 

これは、Wordpress 標準の機能ではなく、Yoast SEO プラグインの機能である。

 

ここで所属する3つのカテゴリうちのひとつをメインにするとどうなるのか?

 

そのままでは、投稿上のパンくずリストのカテゴリ名にメインカテゴリが表示されるわけではない。

記事の所属カテゴリリストを全部表示した時に、メインカテゴリから順番に表示されるわけではない。その記事のカテゴリ別の人気記事をリストする時に、メインカテゴリが採用されずに、サブカテゴリとして付加したつもりのカテゴリで記事がリストアップされる。

 

WordPress の標準では、カテゴリを創設した順番に上から優先に表示されるようになっている。

 

記事内でメインカテゴリーを表示する方法

これらのすべてでメインカテゴリとして活躍してもらうためには、Yoast 式のパンくずリストを採用し、メインカテゴリを表示したいところに次のコードを挿入する必要がある。

カテゴリーリストのページへのリンク付きのメインカテゴリ名が表示される。

 

<?php 
// SHOW YOAST PRIMARY CATEGORY, OR FIRST CATEGORY
$category = get_the_category();
$useCatLink = 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 categories
        $category_display = $category[0]->name;
        $category_link = get_category_link( $category[0]->term_id );
    }
    // Display category
    if ( !empty($category_display) ){
        if ( $useCatLink == true && !empty($category_link) ){
        echo '<span class="cat-name">';
        echo '<a href="'.$category_link.'">'.htmlspecialchars($category_display).'</a>';
        echo '</span>';
        } else {
        echo '<span class="cat-name">'.htmlspecialchars($category_display).'</span>';
        }
    }
}
?>
Using Yoast’s “Primary” Category in Your WordPress Theme – JWinn Development
How to display the “Primary” category provided by the WordPress SEO plugin in a theme, with a fallback to the first category returned by get_the_category()

これでメインカテゴリーが表示される。

 

パンくずリストにメインカテゴリーを表示する方法

パンくずリストは、

Yoast の設定→ 高度な設定

で、パンくずリストを有効にする必要がある。

そして、パンくずリストを表示したい場所に、次のコードを挿入する。

single.php など

<?php if ( function_exists('yoast_breadcrumb') ) { yoast_breadcrumb(' <p id="breadcrumbs">','</p> '); } ?>
Implement Yoast SEO breadcrumbs – Yoast Knowledge Base
Warning: This guide is written for advanced users and developers. The steps below are a temporary solution as manual edits made to theme files may be overwritten with future theme updates. Please contact the theme developer for a permanent solution. We’ve written an article about the importance of breadcrumbs for SEO. To implement the breadcrumbs …

メインカテゴリのカテゴリ名とリンクではなく、リンクなしのカテゴリ名だけを表示するには以下のコード。

<?php 
// SHOW YOAST PRIMARY CATEGORY, OR FIRST CATEGORY
$category = get_the_category();
$useCatLink = 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 categories
        $category_display = $category[0]->name;
        $category_link = get_category_link( $category[0]->term_id );
    }
    // Display category   NO LINK ! Text only
    if ( !empty($category_display) ){
        if ( $useCatLink == true && !empty($category_link) ){
        echo '<span class="cat-name">'.htmlspecialchars($category_display).'</span>';
        } else {
        echo '<span class="cat-name">'.htmlspecialchars($category_display).'</span>';
        }
    }
}
?>

 

これでサブカテゴリではなく、メインカテゴリが生きる。

 

関連

表示中の記事と同じカテゴリの最新記事を表示する方法:Wordpress
  吊橋と鶏検索サイトから飛んできて、ある記事を表示した時に、その記事と同じカテゴリーの最新記事のリストを表示するには? まず、PHP Code Widget プラグインをインストールするとサイドバーのウィジェットにPHPコードが使えるようになる。 そこ...

関連

表示中の記事と同じカテゴリの人気記事を表示する方法:Wordpress
 現在表示している記事と同じカテゴリーの人気記事のリストを表示するには? WPP Plus Widget というプラグインを使ってみたら、その記事の所属カテゴリーだけに限定することができず、その記事のカテゴリーの親のカテゴリーの記事まで表示されてしまう不...

 

 

次の記事