WordPressの「get_terms」を使って、全てのカテゴリーのidを取得する方法

WordPressで全てのカテゴリーのidを取得するには「get_all_category_ids」という関数を使って今までやっていたんですが、Codexを読むと将来的にはこの関数はなくなるみたいです。

代わりに「get_terms」を使う方法をおすすめされているので、いい機会なのでコードを見直しました。

「get_terms」を使って全てのカテゴリーのIDを取得する

私は下のようなコードを書いて、全てのカテゴリーのIDを取得・表示しています。

PHPコード

<?php
$taxonomies =  'category'; //カテゴリーの分類「category」を指定
$args = array( 'fields' => 'ids', 'orderby' => 'id' ); //タームidを昇順にして配列で返すように指定
$category_ids = get_terms( $taxonomies, $args ); //「get_terms」で配列を取得「$category_ids」に格納
if ( !empty( $category_ids ) && !is_wp_error( $category_ids ) ){ //「$category_ids」の値が空でなくてエラーも出ていない場合に処理する
 foreach($category_ids as $cat_id) { //配列の数だけループ
  echo $cat_id; //カテゴリーidを出力
 }
}
?>

Codexにも書いてあるんですが、「field」で返される値は文字列(string型)なので、型を整数に変換して使うといいみたいです。

分類の値って何を見て指定してるの?

ところで「分類の値に『category』を指定してあるけど、これはどうやって知ったの?」と疑問がある方もとても多いと思います。

$taxonomies =  'category'; //カテゴリーの分類「category」

知る方法はいくつかあるけど、WordPressの管理画面の「カテゴリー」のURLを調べてみると理解しやすいかもです。

WordPressの管理画面「カテゴリー」のURLを見てみよう

「カテゴリー」のURLは、下のようになってると思います。

「~/wp-admin/edit-tags.php?taxonomy=category

太字箇所に注目すると、URLクエリパラメーター「taxonomy」に「category」が指定されてるじゃないですか。なので「category」を入れるといいんだな~、っていう単純な感じです。

これを応用して、今度は「全てのタグのidを取得したい」という場合はタグのURLを見ます。すると、URLが下のようになってると思います。

「~/wp-admin/edit-tags.php?taxonomy=post_tag

なので、

$taxonomies =  'post_tag'; //タグの分類「post_tag」

と指定してあげればいい、っていうことですね。これはカスタム分類でも要領は同じなんで、一回理解してしまえばなんとでもいけそうですね。カテゴリーもタグも、まとめて指定したい場合は、配列を使います。

$taxonomies =  array( 'category', 'post_tag' ); //カテゴリーとタグの分類「category」と「post_tag」

ちなみに「category」や「post_tag」は「デフォルト分類」って呼ばれてるみたいです。デフォルト分類もあればカスタム分類もあると。セットで覚えるとよさそうですね。

get_termsはいろいろできる

あと、idだけじゃなくて他の情報も取得したい場合はCodex「get_terms」に指定できるパラメーターが載っていますんで、そちらを参考にしていくつか試してみると理解が進みました。いろいろできるんだなぁ~。

私の場合はこの「get_terms」で全てのカテゴリーのidを取得して、それぞれのカテゴリーに所属する最新記事を数件ずつ表示、みたいな一覧ページを作る時に使いました。

以上、何かのご参考となりましたら幸いです。

著者:bouya Imamura