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を取得して、それぞれのカテゴリーに所属する最新記事を数件ずつ表示、みたいな一覧ページを作る時に使いました。
以上、何かのご参考となりましたら幸いです。
このページを共有する