カテゴリの記事一覧ページで全記事数をページタイトルに表示する方法

カテゴリ記事一覧の HTML に 「全○記事」 を表示

今回は【WordPress サイト】の 「カテゴリの記事一覧ページ」 で、カテゴリ内の全記事数をページタイトルに表示する方法を紹介する。

当ブログにおいても、WordPress カテゴリの記事一覧  にて 「カテゴリ内の全記事数」 を取得し、title タグの後ろに動的出力している。

例:WordPress ワードプレス|サイト作成とブログカスタマイズの全○記事

title タグは Google の検索結果にも表示されるため SEO 対策としての効果もある。なるべく自然なタイトルに工夫して、ぜひ活用しよう。

基本となるソースコード

カテゴリの記事数を取得し、ページタイトルに表示するための 「基本」 となるソースコードは以下となる。

なお、WordPress のバージョンは 4.4 以降で動作確認している。

/** カテゴリの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリの記事一覧ページなら
    if(is_category()) {
        // カテゴリ情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリ内の記事数が2以上なら
        if($cat->count >= 2) {
            // カテゴリ名+カテゴリ内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

これを有効化されたテーマの functions.php に記述するだけなので、意外とかんたん。

なお、「全0記事」 や 「全1記事」 といった間抜けな表示にならないよう、記事数による判定用のロジックも追加してある。

全カテゴリで2つ以上の公開記事があるなら、さらにシンプルな下のコードを使おう。

/** カテゴリの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリの記事一覧ページなら
    if(is_category()) {
        // カテゴリ情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリ名+カテゴリ内の公開済み記事数を使って動的にページタイトルを生成
        $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

少し応用させたソースコード

ここでは、上記の基本となるコードをベースに少し応用させたバージョンも紹介しておく。

指定のカテゴリでのみ表示する

全てのカテゴリではなく、特定のカテゴリのみ指定したい場合もあるだろう。そんなときは、WordPress 管理画面のカテゴリ編集画面からカテゴリIDを確認し、指定すれば良い。

/** 指定したカテゴリの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリID
    $cat_id = 1;
    // 指定したカテゴリの記事一覧ページなら
    if(is_category( $cat_id )) {
        // カテゴリ情報を取得
        $cat = get_category($cat_id);
        // ページタイトルの後ろにカテゴリ内の公開済み記事数を繋げて出力
        $title = 'WordPress(ワードプレス)の記事一覧 | 全' . $cat->count . '記事';
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

タグの記事一覧でも表示する

僕はそもそもタグの利用を推奨しないが、もしタグを利用していて、タグの記事一覧ページのページタイトルでも記事数を表示したいなら、以下のように変更すれば良い。

/** カテゴリとタグの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリの記事一覧ページなら
    if(is_category()) {
        // カテゴリ情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリ内の記事数が2以上なら
        if($cat->count >= 2) {
            //カテゴリ名+カテゴリ内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
    }
    // タグの記事一覧ページなら
    elseif(is_tag()) {
        // タグ情報を取得
        $tag_id = get_queried_object()->term_id;
        $tag = get_tag($tag_id);
        // タグのついている記事数が2以上なら
        if($tag->count >= 2) {
            //タグ名と記事数を使って動的にページタイトルを生成
            $title = $tag->name . 'の記事一覧 | 全' . $tag->count . '記事';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

記事数をざっくり表示する

表示される記事数が多くなってくると、自然なタイトルにするために 「ざっくり」 した数字を表示した方が良い。そんなときは、ロジックを追加して以下のようにすると良いだろう。

/** カテゴリの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリの記事一覧ページなら
    if(is_category()) {
        // カテゴリ情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリ内の記事数が2以上30未満なら
        if($cat->count >= 2 && $cat->count < 30) {
            // カテゴリ名+カテゴリ内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
        // カテゴリ内の記事数が30以上なら
        elseif($cat->count >= 30) {
            // 一の位を切り捨てて全記事数はざっくりと表示
            $rough_count = floor($cat->count / 10) * 10;
            $title = $cat->name . 'の記事一覧 | 全' . $rough_count . '記事以上';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

SEO プラグインへの対応

WordPress で本格的にサイト作成をしている人なら、SEO プラグインの設定をしている人がほとんどのはずだ。

ただ、SEO プラグインが有効になっていると 「プラグインで設定されたページタイトル」 が優先されるため、上で紹介したソースコードを少し修正する必要がある。

ここでは、主要な2つのプラグインに対応する方法を紹介しておく。

Yoast SEO の場合

WordPress で SEO と言えば 「Yoast SEO」 というくらいで、僕も自身で運営するサイトでは全て 「Yoast SEO」 を使っている。

Yoast SEO

Yoast SEO を使っているサイトでは、基本のソースコードの add_filter() で指定されているフック名を ‘pre_get_document_title’ から ‘wpseo_title’ に変更すれば OK だ。

add_filter('wpseo_title', 'dynamic_category_page_title');

なお、’wpseo_title’ のフックを使う場合は、$title パラメータに 「Yoast SEO で設定された SEO タイトル (以下図) 」 が引き渡される。

Yoast SEO のスニペットプレビューで設定する SEO タイトルの例

そのため、$cat->name でページタイトルを作り直す必要はなく、$title の後ろに文字列を追加するだけで良い。

// ページタイトルの後ろにカテゴリ内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';

WordPress 管理画面のカテゴリ編集ページで 「スニペットプレビュー」 から SEO タイトルを設定し、各カテゴリで自然なページタイトルとなるよう工夫することをおすすめする。

All in One SEO Pack の場合

All in One SEO Pack

日本国内でのみ利用者が多いプラグインだが、こちらの SEO プラグインを利用している人はフック名を ‘pre_get_document_title’ から ‘aioseop_title’ に変更しよう。

// add_filter('pre_get_document_title', 'dynamic_category_page_title');
add_filter('aioseop_title', 'dynamic_category_page_title');

‘aioseop_title’ のフックを使う場合も、$title パラメータには 「All in One SEO » 一般設定 » タイトル設定 » カテゴリータイトルのフォーマット (以下図) 」 を使って生成されたページタイトルが引き渡される。

All in One SEO Pack で設定できるカテゴリーのページタイトルのフォーマット

フォーマットでの設定までしかできないため 「Yoast SEO」 と比べれば柔軟さに欠けるが、以下のような書き方は可能である。

// ページタイトルの後ろにカテゴリ内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';

あとがき+参考リンク

カテゴリの記事数を増やしてコンテンツ化させよう

カテゴリの記事一覧ページは、記事数が増えるにつれて 「コンテンツとしての価値」 が上がるため、ページタイトルに全記事数を表示すれば 「検索結果画面でのCTR(クリック率)」 を高めるのにも役立つはずだ。

また今回の方法は、PHPコードを修正して応用すれば 「どんなページでも」 動的なタイトルを出力できるようになる。

僕は、サイト内検索の 「検索結果」 を表示するページでもページタイトルを動的にしている。

例:“ブログ収入”でブログ内を検索 | デジタルノマド教科書@WordPressブログ

以下のリンクも合わせて参考にどうぞ。

Google カスタム検索 × WordPress 検索の美しいカスタマイズ方法