
WordPressで、例えば「特定のタクソノミーに属する」「投稿ページに紐づく」などの指定条件でカスタムタクソノミーのタームを取得する様々な方法をご紹介します。
非常に似た名称の関数が多いので、頭がこんがらがります。なので、自分のためにも整理しました。全て覚える必要もなく、他の関数を用いても実現できるものも多いので、自分にあったものを見つけてそれを使う、という風に決めた方がよいかもしれません。
WordPressで投稿ページに紐づくなど指定した条件のタームを取得する方法
カスタムタクソノミーとタームとは?
カスタムタクソノミーは、通常の投稿でいうカテゴリーやタグのことで、そのような器自体を指します。タームは、カスタムタクソノミーの中の項目のことです。
詳しくはこちらで解説しています。
投稿ページに応じたタームの取得
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
<?php
$terms = wp_get_post_terms( $post->ID, 'タクソノミー名', $args );
?>
$args
は指定しなくても大丈夫ですが、それだとget_the_terms
と変わりません。$args
を指定することで表示順を変えることができます。$args
省略できるんだから、get_the_terms
いる?という疑問があります。
wp_get_object_terms
<?php
$terms = wp_get_object_terms(
array( 1, 2 ), // ポストID
array( 'news_cat', 'news_tag' ),
$args
);
?>
オブジェクト(投稿)のIDとタクソノミー名を指定し、そのタームを取得する関数です。
the_terms
<?php
the_terms( $post->ID, 'タクソノミー名', 'カテゴリー: ', ' / ' );
// 出力結果 カテゴリー: SEO / UX / WordPress
?>
出力の文字列まで指定できる関数です。あまり使わなそうですね
その他の指定
get_terms
<?php
get_terms( 'タクソノミースラッグ', $args );
?>
特定のタクソノミーのターム一覧を取得できます。
タクソノミースラッグは、配列にすることで複数の指定も可能です。1つだけ指定の場合は配列ではなくて大丈夫です。
配列の$argsは省略可能で、省略しない場合は取得順や、項目が一つもないタームを取得するかどうか、などを指定できます。
よく似た関数名に上記でご紹介済みのget_term
とget_the_terms
があります。
get_categories
<?php
get_categories( $args );
?>
こちらは結論、使う場面はないと思います。何故なら、配列の$args
で指定できる条件がget_terms
より少ないためです。タクソノミーの指定も配列の中で行わなければいけません。
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
<?php
get_the_term_list( $id, $taxonomy, $before, $sep, $after );
?>
指定された投稿IDとタクソノミーに対するタームのリストをul
, li
, a
の各要素付きで、各タームへのリンク付きリストをHTMLで出力してくれる関数です。
wp_get_object_terms
<?php
$terms = wp_get_object_terms(
array( 1, 2 ), // ポストID
array( 'news_cat', 'news_tag' ),
$args
);
?>
オブジェクト(投稿)のIDとタクソノミー名を指定し、そのタームを取得する関数です。
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
<?php
$term = get_term( 'ターム名', 'タクソノミー名' );
?>
ターム名とタクソノミー名を指定してそのタームの情報を取得します。
まとめ
WordPressでタームの一覧を取得する方法をご紹介しました。全て覚える必要はないので、自分にとって使い勝手の良いものを見つけるのが良いと思います。