【WordPress】カテゴリーの数を取得する方法|wp_count_termsの現行の書き方と空カテゴリーの扱い

WordPressでカテゴリーがいくつあるか(カテゴリーの総数)を取得するには、wp_count_terms() を使います。この記事では、WP 5.6以降の現行の書き方と、つまずきやすい「空のカテゴリーも数えられる」仕様を中心に解説します。

「数」と「記事数」を混同していませんか?
この記事で扱うのは「カテゴリーが何個あるか」です。「各カテゴリーに記事が何件あるか」を知りたい場合は、カテゴリーオブジェクトの count プロパティを使います。カテゴリ一覧に記事数を表示する方法記事の件数を取得・表示する方法を参照してください。
スポンサーリンク

カテゴリーの総数を取得する(現行の書き方)

WordPress 5.6以降は、タクソノミーを配列の taxonomy キーで渡します。無効なタクソノミー名を渡すと WP_Error が返るため、チェックしてから表示すると安全です。

PHP:カテゴリーの総数を取得(WP 5.6以降)
$category_count = wp_count_terms(array(
  'taxonomy' => 'category',
));

if (!is_wp_error($category_count)) {
  echo 'カテゴリーの数: ' . esc_html($category_count);
}
古い書き方も動くが非推奨
wp_count_terms('category') のように第1引数にタクソノミー名を渡す旧形式は、WP 5.6で非推奨になりました。後方互換で今も動きますが、新しく書くコードは配列形式にしましょう。

空のカテゴリーを含める・除く(hide_empty)

wp_count_terms() は既定で hide_empty => false、つまり記事が1件も無い空のカテゴリーも含めて数えます。いっぽう get_categories() は既定で空を除くため、「一覧に見えている数と合わない」と感じたらこの差が原因です。

PHP:記事があるカテゴリーだけ数える
$active_count = wp_count_terms(array(
  'taxonomy'   => 'category',
  'hide_empty' => true, // 記事が1件以上あるカテゴリーのみ
));

if (!is_wp_error($active_count)) {
  echo '記事があるカテゴリーの数: ' . esc_html($active_count);
}

タグ・カスタムタクソノミーの数を取得する

taxonomy を変えるだけで、タグやカスタムタクソノミーの項目数も同じように取得できます。

PHP:タグ・カスタムタクソノミーの数
// タグの数
$tag_count = wp_count_terms(array('taxonomy' => 'post_tag'));

// カスタムタクソノミーの数(スラッグを指定)
$genre_count = wp_count_terms(array('taxonomy' => 'genre'));

「親カテゴリーだけ数えたい」場合は parent => 0 を追加します。最上位カテゴリーの取得・表示は最上位(第一階層)のカテゴリーのみを取得する方法で詳しく解説しています。

PHP:親カテゴリー(最上位)だけ数える
$parent_count = wp_count_terms(array(
  'taxonomy' => 'category',
  'parent'   => 0, // 最上位のみ
));

よくある質問(FAQ)

Q取得した数が管理画面や一覧の表示と合いません。
Awp_count_terms() は既定で空のカテゴリー(記事0件)も数えます。サイトの一覧(get_categories() 等)は既定で空を除くため、数がずれます。'hide_empty' => true を付けると「記事があるカテゴリーだけ」を数えられます。
Q特定のカテゴリーに属する記事の数を取得するには?
Aカテゴリー自体の数ではなく記事数なら、get_category($id)->count で取得できます。一覧に記事数を並べる方法はカテゴリ一覧に記事数を表示する方法、投稿全体の件数は記事の件数を取得・表示する方法を参照してください。
Qwp_count_terms(‘category’) と書いてある古い記事を見ました。
A第1引数にタクソノミー名を渡す形式はWP 5.6で非推奨になりました。後方互換で動作はしますが、現行は wp_count_terms(array('taxonomy' => 'category')) の配列形式で書くのが推奨です。

まとめ

  • 基本wp_count_terms(array('taxonomy' => 'category'))(WP 5.6以降の現行形式)
  • 空を除く'hide_empty' => true(既定は空カテゴリーも数える)
  • 安全にis_wp_error() チェック+esc_html() で出力
  • 記事数を知りたいなら $category->count(この記事の「数」とは別物)

カテゴリーの取得方法全般は記事のカテゴリーを取得する方法(完全ガイド)にまとめています。