【WordPress】カテゴリ一覧に記事数を表示する方法|wp_list_categories・任意カテゴリ・functions.php不要

WordPress

WordPressのカテゴリ一覧に記事数をカテゴリ名の隣に表示する方法を紹介します。「どのカテゴリにどれだけ記事があるか」が一目で分かり、回遊性が上がります。functions.phpを編集しない標準機能だけの方法から、任意カテゴリだけの表示、自作関数まで3通りを解説します。

この記事でわかること

  • wp_list_categoriesshow_count で記事数を表示(functions.php不要)
  • include任意のカテゴリだけ記事数付き表示
  • 自作関数で柔軟に表示する(エスケープ込み)
スポンサーリンク

functions.php不要!wp_list_categoriesで表示する

最も手軽なのは、WordPress標準の wp_list_categories() を使う方法です。show_counttrue にするだけで記事数が表示されます。カテゴリ一覧を出したいテンプレート(sidebar.phpcategory.php 等)に記述します。

PHP:wp_list_categories で記事数を表示
<?php wp_list_categories(array(
  'orderby'    => 'name',  // 名前順に並べる
  'show_count' => true,    // 記事数を表示する
  'title_li'   => '',      // 「カテゴリー」という見出しを出さない
)); ?>
title_li => '' で余計な見出しを消す
wp_list_categories() は既定で「カテゴリー」という見出し付きの <li> を出力します。title_li を空にすると見出しが消え、純粋なカテゴリリストになります。カテゴリの取得・表示の全体像は記事のカテゴリーを取得する方法(完全ガイド)も参考になります。

任意のカテゴリだけを記事数付きで表示する

特定のカテゴリだけ表示したいときは、include にカテゴリIDをカンマ区切りで指定します。

PHP:include で指定カテゴリだけ表示
<?php wp_list_categories(array(
  'include'    => '1, 2, 3', // 表示するカテゴリIDをカンマ区切りで指定
  'orderby'    => 'name',
  'show_count' => true,
  'title_li'   => '',
)); ?>

カテゴリのIDは、管理画面の「投稿」→「カテゴリー」で対象カテゴリの「編集」を開くと、ブラウザのURLに tag_ID=○○○ の形で表示されます。

カテゴリー編集画面のURLでIDを確認

逆に特定カテゴリを除いて表示したい場合は include の代わりに exclude を使います。最上位カテゴリだけ出したい場合は最上位(第一階層)のカテゴリーのみを取得する方法を参照してください。

自作関数で柔軟に表示する(functions.php)

マークアップを自由にしたい場合は、get_categories() でカテゴリを取得して自分でループします。出力時は esc_url() / esc_html() でエスケープするのがWordPressの作法です。

functions.php:記事数付きカテゴリリストを自作
function my_category_count_list() {
  $categories = get_categories(array('orderby' => 'name'));

  echo '<ul class="cat-count-list">';
  foreach ($categories as $category) {
    printf(
      '<li><a href="%s">%s</a> (%d)</li>',
      esc_url(get_category_link($category->term_id)), // URLをエスケープ
      esc_html($category->name),                       // カテゴリ名をエスケープ
      $category->count                                 // 記事数(整数)
    );
  }
  echo '</ul>';
}

表示したい場所では、作った関数を呼び出すだけです。

PHP:テンプレートで呼び出す
<?php my_category_count_list(); ?>
記事数(count)の数え方に注意
$category->countそのカテゴリに直接属する公開記事数です。子カテゴリの記事は含みません(親に合算したい場合は子カテゴリ分を加算する処理が必要です)。カテゴリ数そのものの取得はカテゴリーの数を簡単に取得する方法、区切り文字付きの一覧表示はカテゴリーやタグの一覧を指定した区切り文字で表示する方法をご覧ください。

よくある質問(FAQ)

Qカテゴリ別の記事数を取得するには?
Aget_category($cat_id)->count で特定カテゴリの記事数を取得できます。一覧で表示するなら wp_list_categories()show_count => true を追加します。全カテゴリと件数をまとめて取得するなら get_categories()foreach で回します。
Qfunctions.phpを編集せずに記事数を出せますか?
Aはい。wp_list_categories(array("show_count" => true)) をテンプレートに書くだけで、functions.phpを編集せずに記事数付きのカテゴリ一覧を表示できます。
Q親カテゴリのページに子カテゴリの記事も表示されますか?
Aデフォルトでは、親カテゴリのアーカイブに子カテゴリの記事も含まれます。含めたくない場合は pre_get_posts フックで $query->set("category__in", [$cat_id]) のように直接カテゴリIDを指定して絞り込みます。

まとめ

  • 手軽に全カテゴリwp_list_categories(["show_count" => true])(functions.php不要)
  • 任意のカテゴリだけinclude にカテゴリIDをカンマ区切りで指定
  • 柔軟なマークアップget_categories() で自作(esc_url/esc_html必須)

まずはfunctions.php不要の wp_list_categories から試し、細かく制御したくなったら自作関数に切り替えるのがおすすめです。