本文へ移動

WP_Query基礎

tax_queryとは?カテゴリ・タグ・カスタムタクソノミーで絞り込む方法

WP_Queryでカテゴリ・タグ・カスタムタクソノミーによる絞り込みに使うのがtax_queryです。1つのtaxonomy条件の基本構造と、field・terms・operatorの選び方を初心者向けに整理します。複数条件のAND / ORは専用記事へ分けます。

Huddly Huddly 投稿日: 2026年8月20日 読了目安: 6分

tax_queryで絞り込む基本

tax_queryは、WP_Queryでタクソノミー条件を指定するための引数です。カテゴリ、タグ、カスタムタクソノミーのような「分類」によって投稿を絞り込むときに使います。

カテゴリだけならcategory_name、タグだけならtagでも書けます。しかし、カスタムタクソノミーを使う場合や、複数の分類条件をAND / ORで組み合わせたい場合は、tax_queryで書く方が整理しやすくなります。

tax_queryは何のために指定するのか

WordPressの投稿には、カテゴリやタグのような「分類」を付けられます。さらに、商品ジャンル、イベント地域、制作実績の種類のように、サイト独自の分類を作ることもあります。このような分類の仕組みを、WordPressではタクソノミーと呼びます。

tax_queryは、WP_Queryで「どのタクソノミーの、どのタームに属する投稿を取得するか」を指定するための書き方です。たとえば「newsカテゴリの記事だけ」「beginnerタグの記事だけ」「event_areaがtokyoのイベントだけ」のような絞り込みに使います。

ここで混同しやすいのが、post_typeとの違いです。たとえばeventは取得する投稿タイプ、event_areaは分類の仕組み、tokyoは分類内の具体的なタームです。post_typeで取得する種類を決め、tax_queryでその中を絞ります。最初は1つのタクソノミーと1つのタームだけで試してください。

価格や開催日のように、分類ではなく投稿ごとの保存値で絞り込む場合は、tax_queryではなくmeta_queryの基本を使います。管理画面で似た入力欄に見えても、分類とカスタムフィールドでは確認する場所が違います。

tax_queryの基本構文

tax_queryは、WP_Queryの$argsの中に書きます。重要なのは、tax_queryの中にさらに配列を入れることです。公式リファレンスでも、tax_queryはタクソノミー条件の配列を持つ形として説明されています。

まずは、通常投稿のうちnewsカテゴリだけを取得する形で構造を見ます。taxonomyで分類名、fieldで指定方法、termsで対象タームを指定します。

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPtax-query-basic-shape.phptax_queryの基本形を確認する$args
$args = [   'post_type'      => 'post',   'posts_per_page' => 5,   'tax_query'      => [      [         'taxonomy' => 'category',         'field'    => 'slug',         'terms'    => 'news',      ],   ],]; $query = new WP_Query( $args );

tax_queryそのものが条件の入れ物で、その中の配列1つが「1つのタクソノミー条件」です。配列を読む前に$args全体を確認したい場合は、WP_Queryの基本構文へ戻ってください。

fieldを省略した場合の初期値はterm_idoperatorを省略した場合の初期値はINです。この記事では値の意味が読み取れるようにfield => ‘slug’を明示しています。最小形で動かし、必要になってからNOT INANDを追加すると、挙動の差を確認しやすくなります。

カテゴリ・タグ・カスタム分類の違い

3つの違いは主にtaxonomyへ書く値です。tagはWP_Queryのタグ専用引数ですが、tax_query内で使う標準タグのtaxonomy名はpost_tagです。カスタムタクソノミーでは、管理画面の表示名やURL用slugではなく、登録時のtaxonomy keyを使います。

分類taxonomyへ書く値field / termsの例
標準カテゴリcategoryslug / news
標準タグpost_tagslug / beginner
カスタム分類登録したtaxonomy keyslug / tokyo

カスタム投稿とカスタム分類を組み合わせる

次の例では、カスタム投稿タイプeventの中から、カスタムタクソノミーevent_areaのタームtokyoが付いた投稿を取得します。eventevent_areatokyoは例なので、実際の登録keyとタームスラッグへ置き換えてください。

クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。

PHPtax-query-custom-taxonomy.phpカスタムタクソノミーevent_areaでイベント投稿を絞り込むWP_Query
$args = [   'post_type'      => 'event',   'posts_per_page' => 6,   'tax_query'      => [      [         'taxonomy' => 'event_area',         'field'    => 'slug',         'terms'    => 'tokyo',      ],   ],]; $event_query = new WP_Query( $args ); if ( $event_query->have_posts() ) {   echo '<ul>';    while ( $event_query->have_posts() ) {      $event_query->the_post();       echo '<li><a href="' . esc_url( get_permalink() ) . '">';      echo esc_html( get_the_title() );      echo '</a></li>';   }    echo '</ul>';} wp_reset_postdata();

このコードでは、post_typetax_queryを組み合わせています。post_typeでイベント投稿を対象にし、その中からevent_areatokyoの投稿だけを絞り込んでいます。

eventは投稿タイプ、event_areaは分類、tokyoはその分類に属するタームです。先ほどの表と同じ3段階で読めば、どこを自分の値へ変えるか判断できます。

複数タームで絞り込む方法

termsには配列も指定できます。ただし、配列にしただけでは全件一致になりません。初期値のoperator => ‘IN’ではどれかに一致、ANDではすべてに一致、NOT INでは指定タームを除外します。

operatortermsが配列の時の意味使う場面
INどれかに一致newsまたはcolumn
ANDすべてに一致newsとcolumnの両方
NOT IN指定したタームを除外privateを一覧から外す

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPtax-query-multiple-terms.phpnewsまたはcolumnカテゴリの記事を取得する$args
$args = [   'post_type'      => 'post',   'posts_per_page' => 5,   'tax_query'      => [      [         'taxonomy' => 'category',         'field'    => 'slug',         'terms'    => [ 'news', 'column' ],         'operator' => 'IN',      ],   ],]; $query = new WP_Query( $args );

このコードでは、termsnewscolumnを指定しています。operatorINなので、どちらかのカテゴリに属している投稿が対象になります。

複数タームでは「どれか」「すべて」「除外」のどれかを日本語で決めてからoperatorへ置き換えます。条件が増えるほど0件の原因を追いにくくなるため、最初はINと1タームで動作を確認してください。

複数の分類条件はrelationでつなぐ

relationは、複数のtaxonomy clause同士をANDまたはORでつなぐ指定です。1つのclause内で複数のtermsをどう判定するかはoperatorの役割であり、relationとは別です。

まずカテゴリだけ、次にタグだけで取得できるかを確認してから組み合わせてください。2条件やネストを含む完成コードは、次の専用記事へ分けています。

値の指定方法と取得範囲

fieldはslugから始めると分かりやすい

fieldは、termsに書いた値を何として解釈するかを指定します。公式リファレンスでは、term_idnameslugterm_taxonomy_idなどが選択肢として示されています。

初心者向けには、まずslug指定がおすすめです。タームの表示名は後から変わることがありますが、スラッグはURLや管理上の識別子として扱いやすく、コード上でも意味が読み取りやすいからです。

fieldの値termsに書くもの初心者向けの使いどころ
slugタームのスラッグ最初におすすめ。コードを見たとき意味が分かりやすい
term_idタームIDIDが確定していて、表示名やスラッグ変更の影響を避けたい場合
nameターム名表示名指定だが、表記ゆれに注意が必要
term_taxonomy_idterm_taxonomy_id通常の記事実装では最初に選ぶ必要は少ない

注意したいのは、fieldtermsの組み合わせです。fieldslugならtermsにはタームスラッグ、fieldterm_idならタームIDを書きます。この組み合わせが逆だと意図した結果にならないため、表示されないときは最初に確認してください。

include_childrenは階層タクソノミーで意識する

カテゴリのような階層を持てるタクソノミーでは、親タームと子タームの関係があります。tax_queryには、子タームを含めるかどうかを指定するinclude_childrenがあります。

include_childrenの初期値はtrueです。親タームだけへ限定する要件なら、同じ条件配列に’include_children’ => falseを加えます。「親カテゴリを指定したのに子カテゴリの記事も出る」場合は、taxonomyが階層型か、この値が要件に合うかを確認してください。

category_nameやtagとの使い分け

カテゴリやタグだけの簡単な絞り込みなら、必ずしもtax_queryを使う必要はありません。WP_Queryにはカテゴリ用、タグ用の専用引数も用意されています。短く読みやすいコードにしたい場合は、それらで十分なこともあります。

しかし、カスタムタクソノミーを使う場合や、カテゴリとタグをAND / ORで組み合わせたい場合は、tax_queryの方が適しています。条件が増えても同じ形で整理できるため、後から読み返したときに意図を追いやすくなります。同じ分類へ専用引数とtax_queryを重ねると条件が厳しくなるため、どちらか一方へそろえてください。

条件選びやすい指定理由
カテゴリ1つをslugで指定category_name短く書ける
タグ1つをslugで指定tag短く書ける
カスタムタクソノミーtax_querytaxonomy keyを指定できる
複数の分類条件tax_queryclause同士をrelationで管理できる

専用引数とtax_queryの選び方は、比較記事が公開された後に次の案内から確認できます。

tax_queryで表示されないときの確認順

tax_queryでよくあるトラブルは、「エラーは出ないのに記事が表示されない」というものです。この場合、コード全体を一気に疑うより、条件を1つずつ確認した方が早く原因に近づけます。

特に多いのは、taxonomy名の間違い、fieldtermsの組み合わせ違い、タームスラッグの間違い、relationoperatorで条件が厳しくなりすぎているケースです。

表示されないときの確認順

  1. 1
    存在が確認できる投稿タイプkeyをpost_typeへ固定する
  2. 2
    tax_queryを1条件だけに減らす
  3. 3
    taxonomyの登録keyが正しいか確認する
  4. 4
    fieldがslugならtermsもスラッグになっているか確認する
  5. 5
    operatorを確認し、複数条件ならrelationも確認する
  6. 6
    posts_per_pageを小さい件数にして対象IDを比べる

複数条件のまま調べると、どの条件で外れたのか分かりません。1条件、1タームで対象IDを確認し、条件を1つずつ戻します。

公式資料で確認したいポイント

tax_queryはWP_Queryの「Taxonomy Parameters」に含まれる指定です。使えるキーやoperatorrelationの意味は公式リファレンスで確認できます。

また、内部的にはタクソノミー条件を扱うWP_Tax_Queryというクラスもあります。通常の記事実装ではWP_Queryのtax_queryとして書くことが多いですが、仕様の理解を深めたい場合はWP_Tax_Queryのリファレンスも参考になります。

公式リンク

公式ドキュメント

tax_queryは分類条件を整理するための書き方

tax_queryは、カテゴリ、タグ、カスタムタクソノミーで投稿を絞り込むための重要な指定です。最初は配列の入れ子が難しく見えますが、taxonomyfieldtermsの3つを押さえると基本形は読みやすくなります。

実装では1つのタクソノミー条件で動作確認し、operatorrelationinclude_childrenを必要に応じて追加します。表示されないときは最小条件へ戻せば、どの追加条件で0件になったかを追えます。

分類条件の最終判断

  • 標準カテゴリ・タグ・カスタムタクソノミーのtaxonomy名を確認した
  • fieldとtermsの値形式が一致している
  • 子タームを含む範囲が要件と合っている
  • 複数条件のAND・ORを日本語で説明できる
  • 条件を戻した後も対象の投稿IDを比較した
WP Query BuilderBuilderで条件を組み直す条件を選び、WP_Queryのコードを画面で作れます。Builderでクエリを作る

この記事を書いた人

Huddly

Web制作 / フロントエンドエンジニア

WordPressとフロントエンド実装で迷いやすい点を、公式情報と検証結果を分けながら、初学者にも追いやすい順序で整理しています。

この記事の検証情報

検証環境

WordPress
7.1
PHP
8.3.33
テーマ
wpq-media + DDEV
対象
カスタム投稿 / taxonomy / meta_query

更新履歴

  • 2026年8月20日 初回公開

この記事を活用する

あとで見返す・共有する

お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。

任意のご支援 役に立ったときだけ、活動を応援できます OFUSEはサイト・記事制作に使います。支援の有無で、読める内容や使える機能は変わりません。