本文へ移動

ツール連携

WP Query Builderでカテゴリー絞り込みを作る方法
|ID・slug・Tax Queryの選び方

特定カテゴリーの記事だけを表示したいのに、ID・slugのどちらを入力するか迷っていませんか?まずは子カテゴリーの記事も含めたいかを決めましょう。管理画面で値を調べ、WP Query Builderの入力と生成コードを順番に確認します。

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

IDで親だけを選ぶならシンプル設定、slugや子の指定は詳細設定を選びましょう

WP Query Builderのシンプル設定は、カテゴリーIDからcategory__inを作ります。指定カテゴリーへ直接付いた記事が対象で、子カテゴリーだけに付いた記事は含めません。

slugで指定するなら詳細設定のcategory_name、子カテゴリーを含めるか明示するならTax Queryを選びます。まず取得したい範囲を決め、管理画面でID・slugを調べてから入力しましょう。

親だけか、子の記事も含めるかで入力方式を選ぶ

たとえば「制作情報」の下に「更新情報」がある場合、更新情報だけが付いた記事も一覧へ出したいでしょうか?ここを決めると、シンプル設定で進められるか、詳細設定が必要かを選べます。

作りたい一覧選ぶ設定入力方法
指定カテゴリーへ直接付いた記事だけシンプル設定カテゴリーIDを入力
子の記事も含めてslugで指定詳細設定category_nameを選ぶ
子を含めるか明示して切り替える詳細設定Tax Queryで指定
標準カテゴリー以外の分類を使う詳細設定Tax Queryへ登録名を入力

「IDで指定し、子カテゴリーだけの記事は含めない」なら、シンプル設定から始められます。表のそれ以外の条件では詳細設定へ進みましょう。IDで子も含めたい場合は、詳細設定のcatでも指定できます。この記事では、slugとTax Queryの操作を順に見ていきます。

カテゴリー一覧と編集画面で、入力する値を調べる

入力する前に、管理画面で名前・slug・IDを見比べましょう。カテゴリーの表示名とslugは同じとは限りません。 今回は名前が「制作情報」、slugがb127-production、IDが10の検証用カテゴリーを使います。あなたのサイトでは、次の手順で実際の値を確認してください。

### 1. 投稿 → カテゴリーで、対象の名前とslugを見る

WordPress管理画面で「投稿 → カテゴリー」を開き、目的のカテゴリーを探します。数が多い場合は検索を使うと見つけやすくなります。画面幅が狭いときは、名前の右にある三角のボタンを押すと詳細が開きます。「制作情報」という名前に対し、スラッグは「b127-production」と表示されていますね。

幅の狭いカテゴリー一覧で制作情報の詳細を開き、スラッグb127-productionを確認する実画面
一覧で確認名前とスラッグを見比べる

ID欄は検証環境に追加した表示です。通常のWordPressでID欄がなくても、次の編集URLから調べられます。

### 2. 名前をクリックし、編集URLのtag_IDとslug欄を確認する

「制作情報」をクリックすると、次の編集画面が開きます。ブラウザのアドレス欄にあるtag_ID=10の10がカテゴリーIDです。スラッグ欄にはb127-productionが入っています。今回は値を見るだけなので、更新ボタンは押しません。

制作情報の編集画面に表示された名前とスラッグb127-production
編集画面IDはURL、slugは入力欄で確認

この画面の編集URLはtag_ID=10。slugで指定するときは名前の制作情報ではなく、b127-productionを使います。

### 3. 子カテゴリーの編集画面で、親との関係を確かめる

一覧へ戻って「更新情報」を開くと、「親カテゴリー」に制作情報が選ばれています。更新情報だけが付いた記事も一覧へ出すなら、子カテゴリーを含める指定が必要です。親カテゴリー自身の編集画面が「なし」でも、子が存在しないという意味ではありません。

更新情報の親カテゴリーとして制作情報が選ばれた実画面
親子関係子の編集画面で親カテゴリーを見る

更新情報の編集画面から、親カテゴリーの欄を抜き出しています。制作情報が選ばれているため、その子に当たります。

名前とslugの取り違えで絞り込めない場合は、カテゴリー絞り込みが効かない原因にも確認例があります。

シンプル設定のカテゴリー欄へIDを入れる

公開中のWP Query Builderを開き、シンプル設定で投稿タイプはpost、公開状態はpublish、取得件数は10、並べ替えはdate、並び方向はDESCにします。「カテゴリー」へ、先ほど調べたIDの10を入力します。

シンプル設定のカテゴリー欄へID10を入力した実画面
IDで指定カテゴリー欄へ数値の10を入力

制作情報という表示名やslugではなく、カテゴリーIDを入れます。

この入力から生成された配列を、省略せず載せています。category__inに10が入っています。配列は取得条件だけなので、一覧の表示には後半の完成例を使います。

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

PHPgenerated-category-id.php制作情報へ直接付いた記事を取得する条件
$args = array(    'post_type' => 'post',    'post_status' => 'publish',    'posts_per_page' => 10,    'order' => 'DESC',    'orderby' => 'date',    'category__in' => array(    10),    'no_found_rows' => true,    'ignore_sticky_posts' => true,    'update_post_meta_cache' => false,    'update_post_term_cache' => false,    'lazy_load_term_meta' => false);

category__inは指定カテゴリーへ直接付いた投稿を取得します。「制作情報と更新情報の両方が付いた記事」は含まれますが、更新情報だけの記事は含まれません。ほかのキーは通常投稿・公開状態・件数・日付降順などの条件と、現在有効な自動高速化の設定です。総ページ数を使う一覧ではno_found_rowsをfalseへ見直してください。

カテゴリー条件を試すときは、本番と分けたWordPress環境で親・子の記事が意図どおり出るか確認します。検証や公開に使うサーバーをこれから用意する場合は、XserverのPHP対応やバックアップ条件も確認できます。

slugを使う場合はcategory_nameを選ぶ

続いて「詳細設定(全項目)」を開きます。「カテゴリーの指定方法」をcategory_nameへ切り替え、「カテゴリーの値」をb127-productionへ入れ替えてください。指定方法と値の両方を変え、IDの10を残さないようにしましょう。

カテゴリーの指定方法がcategory_name、値がb127-productionになった画面
slugで指定方式と値の両方を切り替える

category_nameではスラッグを使います。子カテゴリーだけに付いた記事も取得対象になります。

同じ基本条件から生成したコードです。先ほどのcategory__inがなくなり、category_nameが出ていることを確認しましょう。

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

PHPgenerated-category-slug.php制作情報と子カテゴリーの記事を取得する条件
$args = array(    'post_type' => 'post',    'post_status' => 'publish',    'posts_per_page' => 10,    'order' => 'DESC',    'orderby' => 'date',    'category_name' => 'b127-production',    'no_found_rows' => true,    'ignore_sticky_posts' => true,    'update_post_meta_cache' => false,    'update_post_term_cache' => false,    'lazy_load_term_meta' => false);

category_nameという名前ですが、値はカテゴリーの表示名ではなくslugです。この指定では、親の制作情報だけでなく、子の更新情報だけが付いた記事も含まれます。子を含めたくない場合は、次のTax Queryで明示します。

IDとslugの違いが分かったら、WP Query Builderで自分のカテゴリーの値を入力してみましょう。まず1つの指定方式で生成し、子カテゴリーを含むかも確かめます。

自分のカテゴリーで取得条件を作る

IDならcategory__in、slugならcategory_nameを使います。子の扱いを明示するTax Queryの手順は、この後で説明します。

Tax Queryで子カテゴリーを含めるか指定する

まず「カテゴリーの指定方法」を「使わない」へ戻し、同じカテゴリー条件が二重にならないようにします。次に「Tax Query(分類の条件)」を開き、「分類名」へcategoryを入力してください。分類名を入れると、ほかの欄を編集できるようになります。

画面の項目入力・選択する値意味
分類名 taxonomycategory標準カテゴリーを対象にする
値の指定形式 fieldslugslugでカテゴリーを指定する
分類の値 termsb127-production制作情報のslugを使う
比較方法 operatorINこのカテゴリーに属する投稿を含める
子の分類を含める include_childrenfalse子だけの記事は含めない
Tax Queryでcategory、slug、b127-production、IN、include_children falseを指定した実画面
子の扱いを指定子の分類を含める欄をfalseにする

親カテゴリーへ直接付いた記事だけを取得します。子だけの記事も出したいときはtrueに切り替えます。

生成された配列では、tax_queryの中に5つの指定が入ります。次のコードはfalseを選んだ状態の未編集出力です。

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

PHPgenerated-tax-query.phpslugを使い、制作情報へ直接付いた記事だけを取得する条件
$args = array(    'post_type' => 'post',    'post_status' => 'publish',    'posts_per_page' => 10,    'order' => 'DESC',    'orderby' => 'date',    'tax_query' => array(        array(            'taxonomy' => 'category',            'field' => 'slug',            'operator' => 'IN',            'include_children' => false,            'terms' => 'b127-production'        )    ),    'no_found_rows' => true,    'ignore_sticky_posts' => true,    'update_post_meta_cache' => false,    'update_post_term_cache' => false,    'lazy_load_term_meta' => false);

include_childrenは、WordPress側では初期値がtrueです。「defaultのままなら子は入らない」と考えず、含めない一覧ではfalseが生成コードへ出たことを確認します。 trueへ切り替えると、子カテゴリーだけの記事も対象になります。

親だけ・子だけ・両方が付いた記事で結果を比べる

子カテゴリーを含めると、どの記事が増えるのでしょうか。ここでは親だけの投稿79、子だけの80、親と子の両方が付いた81、別カテゴリーの82を使って比べます。先ほどのWP Query Builderで生成した配列を、分離したWordPress環境でそのまま実行した結果です。

生成した条件取得した投稿ID子だけの記事80
category__inに1081・79含まない
category_nameにb127-production81・80・79含む
Tax Queryでinclude_children=false81・79含まない
Tax Queryでinclude_children=true81・80・79含む

まず、カテゴリーIDを指定した一覧を見てみましょう。親へ直接付いた投稿81・79の2件が並び、子だけの記事80は表示されません。

共通サンプルサイトの制作情報一覧で親カテゴリーに直接付いた投稿81・79の2件が表示された画面
親カテゴリーをIDで指定直接分類した2件が表示される

category__inのID指定では、投稿81・79の2件です。tax_queryで子を含めない場合も同じ結果になります。

次に子カテゴリーも含めると、更新情報だけが付いた記事80が加わります。親と子の両方が付いた81が消えたり、二重に並んだりするわけではありません。

同じサンプルサイトの制作情報一覧で子カテゴリーだけの投稿80も加わり81・80・79の3件が表示された画面
子カテゴリーも含める子だけの記事80も一覧に加わる

子を含めると投稿81・80・79の3件です。slug指定も同じ結果です。親と子の両方が付いた81は常に入り、別カテゴリーだけの82は表示されません。

別カテゴリーだけの82は、どの条件にも入りません。「子を含めない」は、「子も付いている投稿を除外する」という意味ではありません。 親へ直接付いている記事は対象に残ります。

生成した配列にループを加えて一覧を表示する

クラシックテーマを使う場合は、子テーマにtemplate-parts/category-list.phpを作り、次のコードを置きます。新規ファイル用に先頭の<?phpも含めています。すでにPHPを書いている箇所へ組み込むときは、開始タグを重ねないでください。配列は最初のID指定の生成結果をそのまま使い、その下に取得・表示・0件時の案内・リセットを手書きで追加しています。

子テーマのpage.phpでは、既存のメインループが終わった後、get_footer()より前から、get_template_part( ‘template-parts/category-list’ );で1回だけ呼び出します。既存の本文出力は残してください。投稿本文の編集欄や、functions.phpへ表示コード全体を貼る手順ではありません。ブロックテーマやサイトエディターのテンプレートへは、そのまま貼れません。

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

PHPtemplate-parts/category-list.php生成したID指定の条件で投稿一覧を表示する
<?php$args = array(    'post_type' => 'post',    'post_status' => 'publish',    'posts_per_page' => 10,    'order' => 'DESC',    'orderby' => 'date',    'category__in' => array(    10),    'no_found_rows' => true,    'ignore_sticky_posts' => true,    'update_post_meta_cache' => false,    'update_post_term_cache' => false,    'lazy_load_term_meta' => false); $category_query = new WP_Query( $args ); if ( $category_query->have_posts() ) :    while ( $category_query->have_posts() ) :        $category_query->the_post();        ?>        <article>            <h2><a href="<?php echo esc_url( get_permalink() ); ?>"><?php echo esc_html( get_the_title() ); ?></a></h2>        </article>        <?php    endwhile;else :    echo '<p>該当する記事はありません。</p>';endif; wp_reset_postdata();

検証環境では81・79の2投稿が表示され、最後に元ページの投稿データへ戻りました。実際に使う際はcategory__inの10を反映先のIDへ置き換えます。タイトルだけでなく、リンク先や0件時の案内も確認してください。

同じカテゴリーの指定は1つの方法にそろえる

category_nameとtaxonomy=categoryのTax Queryを同時に残すと、WP Query Builderは条件の意味が重なりやすいという警告を出します。単純な指定はカテゴリーの欄、子の扱いや複数分類を組み合わせる指定はTax Queryへ整理しましょう。

条件を重ねるとANDで候補が狭まり、意図せず0件になることがあります。警告だけを消すのではなく、取得したい範囲を1つの方法で表せるか見直してください。

複数カテゴリーでは、どれか1つかすべてかを選ぶ

ここまでの1カテゴリーを指定する例から条件を増やす場合は、「どれか1つに属する記事」と「すべてに属する記事」を区別します。

取得したい記事指定の候補気を付けること
複数IDのどれかに属するcategory__in子カテゴリーは含まない
複数IDのすべてに属するcategory__and同じ投稿に全カテゴリーが必要
複数slugのどれかに属するcategory_nameをカンマ区切り子カテゴリーを含む
カテゴリーとタグを組み合わせるTax Queryへ条件を追加2条件以上でrelationを選ぶ

複数分類のAND・ORを決めたい場合は、次の解説で取得範囲を整理してからWP Query Builderへ戻ると、条件を増やしすぎずに済みます。

0件なら、値・公開状態・重複条件を確認する

カテゴリー指定を加えた途端に0件になったら、別の条件を増やす前に次の順で切り分けましょう。

0件になるときの確認順

  1. 1
    カテゴリー条件を外すと投稿が出るか確認する
  2. 2
    反映先にID・slugが実在し、対象投稿へ付いているか調べる
  3. 3
    category_nameにはslug、Tax Queryにはfieldに合うtermsを指定する
  4. 4
    カテゴリー欄とTax Queryに同じ条件が残っていないか確認する
  5. 5
    post_typeとpost_statusが対象投稿に合っているか確認する

どの段階で0件になるか分かったら、症状に合う記事で確認項目を絞れます。

入力条件と生成コードが一致してからコピーする

最後に、選んだ方式と生成コードを見比べます。画面全体の操作やコピー方法はWP Query Builderの使い方チュートリアルで確認できます。

コピー前に確認すること

  • ID・slugを反映先で調べた
  • 子カテゴリーだけの記事を含めるか決めた
  • 入力した方式に合うcategory__in・category_name・tax_queryが生成された
  • カテゴリー欄とTax Queryへ同じ条件を重ねていない
  • 生成配列にループ・0件時の表示・リセットを加えた
  • ローカルで親だけ・子だけ・両方・0件を確かめた

WordPress公式

カテゴリー条件の公式資料

カテゴリー欄へ表示名を入れてもよいですか?

シンプル設定はID用です。詳細設定でcategory_nameを選ぶ場合はslugを入れます。Tax Queryではfieldに合う値をtermsへ入れてください。

親と子の両方が付いた投稿は、include_children=falseで除外されますか?

除外されません。親カテゴリーへ直接属するため、親を指定した取得条件を満たします。

IDで子カテゴリーも含められますか?

詳細設定のcatを使うか、Tax Queryでfieldをterm_id、termsを親ID、include_childrenをtrueにします。シンプル設定のcategory__inとは範囲が違います。

カスタム投稿タイプでも使えますか?

post_typeを登録名へ合わせます。標準カテゴリーを使うなら、その投稿タイプにcategoryが関連付けられている必要があります。カスタム分類ならTax Queryのtaxonomyへ登録名を入れます。

カテゴリー一覧にID列がありません。どう調べますか?

WordPress標準ではID列がないため、対象名をクリックして編集画面を開き、ブラウザのURLにあるtag_IDの数値を読みます。この記事のID列は検証環境の補助表示です。

生成したコードだけで一覧が表示されますか?

配列だけでは表示されません。WordPress側でWP_Queryを実行し、ループ・HTML・0件時の表示・wp_reset_postdata()を加えます。

WP Query BuilderBuilderで条件を組み直す条件を選び、WP_Queryのコードを画面で作れます。Builderでクエリを作る

この記事を書いた人

Huddly

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

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

この記事の検証情報

検証環境

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

更新履歴

  • 2026年11月8日 初回公開

この記事を活用する

あとで見返す・共有する

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

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