説明
WP_Tax_Query は、タームを条件にして投稿を絞り込む仕組みを表すクラスです。WP_Query の tax_query に指定する条件を組み立てます。
基本構文
tax_query => array( array( 'taxonomy' => '...', 'field' => '...', 'terms' => ... ) )
引数
taxonomy:タクソノミー名field:term_id/slug/nameterms:タームの値(配列可)operator:IN/NOT IN/ANDinclude_children:子タームを含めるか
戻り値
WP_Query の引数として使います。
使い方(サンプル)
$q = new WP_Query( array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'news',
),
),
) );
注意点
fieldの指定を間違えると、結果が空になります。- 子タームも含まれるのが既定です。除外するときは
include_childrenをfalseにします。
実務での使いどころ
WP_Queryのtax_queryに渡す条件(タームでの絞り込み)を、理解するとき。- 複数のタクソノミーを、組み合わせて、絞り込むとき。
よくあるミスと対処
fieldの指定(term_id・slug・name)と、termsの値の種類が、一致していない。- 階層ありのタクソノミーで、子ターム(
include_children)が、既定で含まれることを、知らない。 relationを指定せず、条件が、すべてANDになる。
NG例
'tax_query' => array(
array( 'taxonomy' => 'news_cat', 'terms' => 'important' ), // field の既定は term_id。スラッグでは、一致しない
),
OK例
'tax_query' => array(
array(
'taxonomy' => 'news_cat',
'field' => 'slug',
'terms' => 'important',
),
),
使い分け早見表
| やりたいこと | 使うもの |
|---|---|
| タームで絞り込む | WP_Query の tax_query |
| カスタムフィールドで絞り込む | WP_Query の meta_query |
| 投稿が、タームを持つか判定 | has_term() |

コメント