【WordPress】カスタムタクソノミーのターム情報を取得する方法

WordPressでサイトを作成していると、カスタム投稿タイプを使って最初からある「投稿」とは違う種類の投稿を作ることがあります。

たとえば、「お知らせ」とかとは別に「プレスリリース」を作ったりなどです。企業サイトなどであればよくあることです。カテゴリーで「お知らせ」と「プレスリリース」を作っても良いのですが、『管理画面上で分けて煩雑にならないようにしたい』などの要望もあります。

そのとき、カテゴリーも通常のものではなく、カスタムタクソノミーを使って独自のカテゴリーを作ったりします。そこで記事に設定したカスタムタクソノミーのターム情報を取得する方法をメモしておきます。

カスタムタクソノミーとタームについて

簡単にですが、タクソノミーとタームの意味に触れておきます。

WordPressはインストールした時点で「カテゴリー」や「タグ」がありますが、これもタクソノミーです。標準で付いている2つのタクソノミー以外にタクソノミーを作ったとき、それを「カスタムタクソノミー」と呼んでいるのです。

記事に設定したタームの情報を取得する方法

下記は「the_post()」をしている場合を想定しています。

$terms = get_the_terms(get_the_ID(), 'info_cat');

get_the_terms」を使って記事に設定されたタームの情報を取得できます。引数には「投稿ID」と「作成したタクソノミーのスラッグ(上記の場合:info_cat)」を渡します。

ここでは投稿ID取得に「get_the_ID」を使っていますが、取得したい投稿がある場合は、その投稿IDを設定してください。

1つ目の情報を取得する場合

$terms = get_the_terms(get_the_ID(), 'info_cat');
$term = $terms[0];

取得したタームの情報は配列になっているので、上記のように「$terms[0]」で配列の1つ目を取り出せばOKです。

取得できる情報

/* 取得できる情報
array(1) {
  [0]=>object(WP_Term) (10) {
    ["term_id"]=>int(2)
    ["name"]=>string(12) "お知らせ"
    ["slug"]=>string(11) "information"
    ["term_group"]=>int(0)
    ["term_taxonomy_id"]=>int(2)
    ["taxonomy"]=>string(8) "info_cat"
    ["description"]=>string(0) ""
    ["parent"]=>int(0)
    ["count"]=>int(1)
    ["filter"]=>string(3) "raw"
  }
}

いくつか抜粋すると、下記のような感じです。とりあえず、個人的にはこれで十分かなと思います。

キー 内容
term_id タームのID
name タームの名称
slug タームのスラッグ
term_taxonomy_id タクソノミーのID
※こちらもタームのIDが入っているような…
taxonomy タクソノミーのスラッグ

アクセスする方法

$terms = get_the_terms(get_the_ID(), 'info_cat');
$term = $terms[0];
// アクセス方法
echo $term->name;

オブジェクトなので「->」を使ってアクセスできます。

カテゴリーの場合

$categories = get_the_category(get_the_ID());
$cat = $categories[0];

カテゴリーの場合は、上記のように「get_the_category」を使って記事に設定したカテゴリーの情報を取得できます。

カスタムタクソノミーでも「get_the_category」を使って取得しようとしてハマる場合があるのでご注意ください

まとめ

get_the_terms」を使って引数に「投稿ID」と「作成したタクソノミーのスラッグ(下記の場合:info_cat)」を指定すれば記事に設定したターム情報が取得できる。1つ目だけ欲しい場合は、「$terms[0]」でOK。

$terms = get_the_terms(get_the_ID(), 'info_cat');
$term = $terms[0];

スポンサーリンク