WordPressで、例えば「特定のタクソノミーに属する」「投稿ページに紐づく」などの指定条件でカスタムタクソノミーのタームを取得する様々な方法をご紹介します。

非常に似た名称の関数が多いので、頭がこんがらがります。なので、自分のためにも整理しました。全て覚える必要もなく、他の関数を用いても実現できるものも多いので、自分にあったものを見つけてそれを使う、という風に決めた方がよいかもしれません。

WordPressで投稿ページに紐づくなど指定した条件のタームを取得する方法

カスタムタクソノミーとタームとは?

カスタムタクソノミーは、通常の投稿でいうカテゴリーやタグのことで、そのような器自体を指します。タームは、カスタムタクソノミーの中の項目のことです。
詳しくはこちらで解説しています。

投稿ページに応じたタームの取得

get_the_terms

関数リファレンス/get the terms

<?php
$terms = get_the_terms( $post->ID, 'タクソノミー名' );
$terms = get_the_terms( $post->ID, array( 'タクソノミー名1', 'タクソノミー名2' ) );
?>

投稿ページ(single.php)においてタームを取得する関数として、get_the_termsがあります。
タクソノミー名は、例えばnews_catなどです。スラッグ名なので、タクソノミースラッグとも呼ばれます。

wp_get_post_terms

関数リファレンス/wp get post terms

<?php
$terms = wp_get_post_terms( $post->ID, 'タクソノミー名', $args );
?>

$argsは指定しなくても大丈夫ですが、それだとget_the_termsと変わりません。$argsを指定することで表示順を変えることができます。$args省略できるんだから、get_the_termsいる?という疑問があります。

wp_get_object_terms

関数リファレンス/wp get object terms

<?php
$terms = wp_get_object_terms( 
     array( 1, 2 ),  // ポストID
     array( 'news_cat', 'news_tag' ), 
     $args
);
?>

オブジェクト(投稿)のIDとタクソノミー名を指定し、そのタームを取得する関数です。

the_terms

関数リファレンス/the terms

<?php
the_terms( $post->ID, 'タクソノミー名', 'カテゴリー: ', ' / ' );
 // 出力結果 カテゴリー: SEO / UX / WordPress
?>

出力の文字列まで指定できる関数です。あまり使わなそうですね

その他の指定

get_terms

関数リファレンス/get terms

<?php
get_terms( 'タクソノミースラッグ', $args );
?>

特定のタクソノミーのターム一覧を取得できます。
タクソノミースラッグは、配列にすることで複数の指定も可能です。1つだけ指定の場合は配列ではなくて大丈夫です。
配列の$argsは省略可能で、省略しない場合は取得順や、項目が一つもないタームを取得するかどうか、などを指定できます。

よく似た関数名に上記でご紹介済みのget_termget_the_termsがあります。

get_categories

関数リファレンス/get categories

<?php
get_categories( $args );
?>

こちらは結論、使う場面はないと思います。何故なら、配列の$argsで指定できる条件がget_termsより少ないためです。タクソノミーの指定も配列の中で行わなければいけません。

wp_list_categories

テンプレートタグ/wp list categories

<?php
wp_list_categories( $args );
?>

こちらは、ul, li, aの各要素付きで、各タームへのリンク付きリストをHTMLで出力してくれる関数です。クラス名も勝手に付与されます。カスタマイズ可能ですが、結局get_terms使った方が勝手が良いので、私は使ったことがありません。

例えば特定のタクソノミーのターム一覧を、項目の有無に関わらず取得する場合は次の記述になります。

<?php
wp_list_categories ( array(
   'taxonomy' => 'blog_cat',
   'hide_empty' => 'false'
));
?>

get_the_term_list

関数リファレンス/get the term list

<?php
get_the_term_list( $id, $taxonomy, $before, $sep, $after );
?>

指定された投稿IDとタクソノミーに対するタームのリストをul, li, aの各要素付きで、各タームへのリンク付きリストをHTMLで出力してくれる関数です。

wp_get_object_terms

関数リファレンス/wp get object terms

<?php
$terms = wp_get_object_terms( 
     array( 1, 2 ),  // ポストID
     array( 'news_cat', 'news_tag' ), 
     $args
);
?>

オブジェクト(投稿)のIDとタクソノミー名を指定し、そのタームを取得する関数です。

get_term_by

関数リファレンス/get term by

<?php
$term = get_term_by( $field , $value , 'タクソノミー名' ); 
?>

$fieldには、 ‘id’, ‘slug’, ‘name’, ‘term_taxonomy_id’のいずれかを指定できます。
$valueは、$fieldで指定した値です。例えばslugを指定したら、slugの名称が入ります。
以下は、news_catというタクソノミーの中でirというスラッグのついたタームを取得する例です。

<?php
$term = get_term_by( 'slug' , 'ir' , 'news_cat' ); 
?>

紛らわしい関数

get_term

関数リファレンス/get term

<?php
$term = get_term( 'ターム名', 'タクソノミー名' );
?>

ターム名とタクソノミー名を指定してそのタームの情報を取得します。

まとめ

WordPressでタームの一覧を取得する方法をご紹介しました。全て覚える必要はないので、自分にとって使い勝手の良いものを見つけるのが良いと思います。

著者のイメージ画像

BringFlower
稲田 高洋(Takahiro Inada)

2003年から大手総合電機メーカーでUXデザインプロセスの研究、実践。UXデザイン専門家の育成プログラム開発。SEOにおいても重要なW3Cが定めるWeb標準仕様策定にウェブアクセシビリティの専門家として関わる。2010~2018年に人間中心設計専門家を保有。その後、不動産会社向けにSaaSを提供する企業の事業開発部で複数サービスを企画、ローンチ。CMSを提供し1000以上のサイトを分析。顧客サポート、サイト運営にも関わる。2022年3月にBringFlowerを開業し、SEOコンサル、デザイン、ウェブ制作を一手に受ける。グッドデザイン賞4件、ドイツユニバーサルデザイン賞2件、米国IDEA賞1件の受賞歴あり。