複数のカテゴリに所属する記事のメインカテゴリーを表示する方法

 

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;
?>

 

 

 

 

  • Google の Indexing API を使うと、新しい投稿記事を瞬時にGoogleの検索エンジンに登録できる。 WordPress のプラグインとしてインデックスAPIが利用できる。使い方は英語 ...
  • Yoast SEO を停止して、Rank Math SEO プラグインを使ってみたらGoogle の検索結果に表示される記事抜粋スニペットの文字数が短過ぎに見えてびっくりした。#1 Yoast Alt ...
  • WP_CRON を停止して、Linux の crontab に移行する設定をこれまでに何度も試みたがうまくいかなかった。 毎日バックアップされるはずの、UpdraftPlus プラグインのクロンが動い ...
  • Kusanagi WordPress プラットフォームでは Fcache とBcache がある。 Fcache とはNginx ヱブサーバーのキャッシュ機能であり、Kusanagi の独自機能ではな ...
  • 目次 1 HTTPD アクセスログの日本語化 2 Logwatch も日本語化 HTTPD アクセスログの日本語化 Nginx,  Apache ヱブサーバーのアクセスログを見ると、日本語URLはエン ...
  • ヱブサイトの再構築中には、スタイルシート、style.css を頻繁に調整更新する。 CSSを追加、編集する度に再読み込みを繰り返して、変更の反映を確認していた。 これで編集者は反映を確認できるのだが ...
  • WordPressで使える頁カウンターをいくつか同時に使ってカウントの仕方の違いを比べてみた。WP-PostViews    長期常用中 Post Views Counter  新規インストール Go ...
  • Pjax で非同期画面遷移するWordpress テーマ Pjax Blog に変えてみた。 Pjax Blog テーマでは、Barba.js が使用されている。Pjax Blog | Unique ...

タグクラウド

WordPress カテゴリ人気記事 Views most

WordPress カテゴリ人気記事 月間

20190831

タグ関連記事

閲覧履歴

    //cookieが無い場合の処理
2019
GA-views: 1,504
20190831