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

 

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

 

 

 

 

  • 6 views
    Pjax で非同期画面遷移するWordpress テーマ Pjax Blog に変えてみた。 Pjax Blog テーマでは、Barba.js が使用されている。 Pjax Blog | Uniqu ...
  • 17 views
    WordPressの投稿記事は、誤字脱字を少し修正しただけでも更新日時が変更されてしまう。 誤字の訂正だけで3年前の記事の更新日が更新されてしまうのはおかしい。 目次 1 編集画面に更新日時の変更オプ ...
  • 81 views
    これまで remodal.js を使ってハンバーガーメニューのモーダルメニューウィンドウが開いていたのを、CSSだけで動くようにした。 header.php 内の3本線のハンバーガーメニューを表 ...
  • 73 views
    CSSを遅延読み込みするためには、preload を使えばよいのだが、Firefox 、IEブラウザーでは動作しない。 それで、loadCSS   cssrelpreload.js を併用する。 ...
  • 75 views
    Jpeg 画像をWebp形式に変換するとサイズが30%も減少するなどと説明されていることがよくある。 Webp 変換後のサイズの方が大きくなったというのは見つからなかった。 そこで、Webpに変換して ...
  • 63 views
    画像のサムネイルを再作成する時には、Regenerate Thumbnails 等のプラグインを使用しがちであるが、サーバーにSSHでログインできるならば、コマンドラインで同じことができる。 その方が ...
  • 70 views
    画像をWordpressにアップロードした時に、予め登録しておいた画像のタグ、キーワードが表示されるようにしたい。 Lightroom で画像を整理する時に、キーワードを登録すると、Windows の ...
  • 63 views
    サイトの頁ソースを見ると、日本語を含むURLリンクが全てエンコードされていて読めない状態なのが気になった。 これはWordpressの仕様で、日本語で出力しようとしても、最後にはエンコードされて出力 ...

タグクラウド

WordPress カテゴリ人気記事

タグ関連記事