WordPressでは、カテゴリー・タグ・タクソノミーの各タームに関する様々な情報は、「WP_Termオブジェクト」というものに保存されています。
投稿に紐づいたカテゴリなどの情報を扱う時、まずはget_the_category()
などを使用してそのカテゴリに関するオブジェクトを取得し、その中からカテゴリ名などの各情報を取得します。
しかし、CSVで投稿を管理する場合など、たまに「タームID」を元にして、カテゴリやタームの様々な情報を取得したい時があります。
今回はそんな時のための備忘録です。
ターム情報をWP_Termオブジェクトまたは配列で取得する
カテゴリー・タグ・タクソノミーそれぞれに対し、以下のような関数が用意されています。
- get_category()
- get_tag()
- get_term()
get_category()
使用形式
get_category($category, $output, $filter);
3つの引数はそれぞれ次のような意味を持っています。
引数 | 説明 |
---|---|
$category | カテゴリーID または オブジェクト。必須。 初期値: なし |
$output | オブジェクトで取得するか、配列で取得するか 初期値: 'OBJECT' ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 ) |
$filter | フィルターを指定。デフォルト('raw')ではどれも適用されない。 初期値: 'raw' |
例 : カテゴリIDが10のカテゴリの名前と投稿数を出力する
$cat = get_category( 10 ); //情報オブジェクトを取得
echo $cat->name; //カテゴリ名を出力
echo $cat->count; //投稿数を出力
get_tag()
使用形式
get_tag($tag, $output, $filter);
3つの引数はそれぞれ次のような意味を持っています。
引数 | 説明 |
---|---|
$tag | タグID または オブジェクト。必須。 初期値: なし |
$output | オブジェクトで取得するか、配列で取得するか 初期値: 'OBJECT' ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 ) |
$filter | フィルターを指定。デフォルト('raw')ではどれも適用されない。 初期値: 'raw' |
例 : タグIDが20のタグの名前と投稿数を出力する
$tag = get_tag( 20 ); //情報オブジェクトを取得
echo $tag->name; //タグ名を出力
echo $tag->count; //投稿数を出力
get_term()
使用形式
get_term($term, $taxonomy, $output, $filter);
4つの引数はそれぞれ次のような意味を持っています。
引数 | 説明 |
---|---|
$term | タームID または オブジェクト。必須。 初期値: なし |
$taxonomy | $term が含まれるタクソノミーのスラッグ。 初期値: なし |
$output | オブジェクトで取得するか、配列で取得するか 初期値: 'OBJECT' ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 ) |
$filter | フィルターを指定。デフォルト('raw')ではどれも適用されない。 初期値: 'raw' |
**[修正しました。 (1027/11/10) ] - 第二引数の$taxonomyについて、日本語コーデックスを見ると必須と書いていましたが、 WORDPRESS.ORGを見ると必須ではないようです。実際、$taxonomomyを指定しなくても無事に取得できました。
例 : 'language'というタクソノミーに含まれるタームID30のタームの名前と投稿数を出力する
$term = get_term(30 , 'language'); //情報オブジェクトを取得
echo $term->name; //ターム名を出力
echo $term->count; //投稿数を出力
オブェクトで取得 or 配列で取得 について
get_category()、get_tag()、get_term()ではそれぞれ、第3引数$output
にて、返り値をWP_Termオブジェクトで取得するか配列で取得するかを指定できます。
それぞれどのような情報が返ってくるのかも確認しておきましょう。
WP_Termオブジェクトで取得した場合
カテゴリー・タグ・タクソノミーの各タームで共通するパラメータ
object(WP_Term) {
["term_id"] => int() //タームID
["name"] => string() //ターム名
["slug"] => string() //"タームスラッグ
["term_group"] => int() //タームグループID
["term_taxonomy_id"] => int() //タームタクソノミーID
["taxonomy"] => string() //タクソノミー
["description"] => string() //ターム説明
["parent"] => int() //親
["count"] => int() //投稿数
["filter"] => string() //フィルタ
}
これらに加え、カテゴリーに関するタームのWP_Termオブジェクトにのみ、以下の情報が追加されます。
カテゴリーにのみ存在するパラメータ
object(WP_Term) {
/* ... */
["cat_ID"] =>int() //カテゴリID = ["term_ID"]
["category_count"] =>int() //投稿数 = ["count"]
["category_description"] =>string() //カテゴリ説明 = ["description"]
["cat_name"] =>string() //カテゴリ名 = ["name"]
["category_nicename"] =>string() //カテゴリスラッグ = ["slug"]
["category_parent"] =>int() //親 = ["parent"]
}
カテゴリーにのみ存在するパラメータは、共通で存在するパラメータと被っているので、正直覚える必要はありません。
配列で取得した場合
'ARRAY_A' (連想配列)を指定した場合の返り値
array() {
["term_id"] => int() //タームID
["name"] => string() //ターム名
["slug"] => string() //"タームスラッグ
["term_group"] => int() //タームグループID
["term_taxonomy_id"] => int() //タームタクソノミーID
["taxonomy"] => string() //タクソノミー
["description"] => string() //ターム説明
["parent"] => int() //親
["count"] => int() //投稿数
["filter"] => string() //フィルタ
}
'ARRAY_N' (添字配列)を指定した場合の返り値
array() {
[0] => int() //タームID
[1] => string() //ターム名
[2] => string() //タームスラッグ
[3] => int() //タームグループID
[4] => int() //タームタクソノミーID
[5] => string() //タクソノミー
[6] => string() //ターム説明
[7] => int() //親
[8] => int() //投稿数
[9] => string() //フィルタ
}
基本的に、得られる情報数に違いはないようです。
ちなみに、PHPにおける「オブジェクト」と「配列」での値の扱い方は少し異なります。その辺については以下の記事でまとめていますので、そちらをご覧ください。
実はカテゴリー・タグ・タクソノミーに関係なく、どれでも使える
例えばget_category()
にタグのタームIDやタクソノミーのタームIDを指定したり、get_tag()
にカテゴリーのタームIDを渡しても、普通に情報が取得できます。
タームIDだけじゃなく、タームスラッグからも情報を取得できるget_term_by()
タームIDではなく、タームスラッグから情報を取得したい場合は、 get_term_by()
という関数を使用します。
使用形式
get_term_by( $field, $value, $taxonomy, $output, $filter );
タームをIDで指定するのか、スラッグで指定するのかを決めてから引数に情報渡します。
タームIDから情報を取得したい場合はわざわざこの関数を使用せずとも、先ほど紹介した、get_term()
で十分かと思います。
使用例:カテゴリID 10 の情報を取得
$term = get_term_by('id', 10, 'category');
タームIDからターム名のみを取得したい時は
最後に、タームIDからターム名のみ取得できる関数 get_the_category_by_ID()
を紹介しておきます、
WP_Termオブジェクトで言うところの、 ['name']
にあたる情報だけが欲しい時に使えます。
使用形式
get_the_category_by_ID($cat_ID);
引数は一つだけ。タームIDを指定します。
例 : カテゴリIDが 10 のカテゴリ名を表示
echo get_the_category_by_ID( 10 );
これもまた、 カテゴリーだけではなく、タグやタクソノミーのタームIDを指定しても大丈夫です。
ちなみに、カテゴリー・タグ・タクソノミー用に同じような関数(例えばget_the_tag_by_ID()とか)があるのかなと思ったのですが、調べてもでてきませんでした。なぜだろう。笑
タームIDを管理画面から直接調べる方法
扱いたいカテゴリがすでに決まっていて、そのカテゴリ情報をサイトのどこかに表示したい場合、管理画面から直接カテゴリIDを調べる必要があります。
カテゴリなどのタームIDは、タームの編集画面のURLにtag_ID=〇〇
として含まれているので、そこから読みとることが可能です。
URLの例
https:// ... /wp-admin/term.php?taxonomy=category&tag_ID=12&post_type=...
このようなURLの場合、そのカテゴリのタームIDは「12」です。
例えばとあるカテゴリーのタームIDを調べる場合。
- 管理画面の左メニューで、「投稿」 -> 「カテゴリー」と進みます。
- カテゴリー一覧で表示されるので、IDを知りたいカテゴリにマウスカーソルを乗せてください。
- すると、ウインドウの左下にカテゴリー編集画面のURLが表示されています。
- または、IDを知りたいカテゴリーをクリックしてカテゴリ編集画面へ進み、URLバーで確認してください。