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」と表示されていますね。

ID欄は検証環境に追加した表示です。通常のWordPressでID欄がなくても、次の編集URLから調べられます。
### 2. 名前をクリックし、編集URLのtag_IDとslug欄を確認する
「制作情報」をクリックすると、次の編集画面が開きます。ブラウザのアドレス欄にあるtag_ID=10の10がカテゴリーIDです。スラッグ欄にはb127-productionが入っています。今回は値を見るだけなので、更新ボタンは押しません。

この画面の編集URLはtag_ID=10。slugで指定するときは名前の制作情報ではなく、b127-productionを使います。
### 3. 子カテゴリーの編集画面で、親との関係を確かめる
一覧へ戻って「更新情報」を開くと、「親カテゴリー」に制作情報が選ばれています。更新情報だけが付いた記事も一覧へ出すなら、子カテゴリーを含める指定が必要です。親カテゴリー自身の編集画面が「なし」でも、子が存在しないという意味ではありません。

更新情報の編集画面から、親カテゴリーの欄を抜き出しています。制作情報が選ばれているため、その子に当たります。
名前とslugの取り違えで絞り込めない場合は、カテゴリー絞り込みが効かない原因にも確認例があります。
シンプル設定のカテゴリー欄へIDを入れる
公開中のWP Query Builderを開き、シンプル設定で投稿タイプはpost、公開状態はpublish、取得件数は10、並べ替えはdate、並び方向はDESCにします。「カテゴリー」へ、先ほど調べたIDの10を入力します。

制作情報という表示名やslugではなく、カテゴリーIDを入れます。
この入力から生成された配列を、省略せず載せています。category__inに10が入っています。配列は取得条件だけなので、一覧の表示には後半の完成例を使います。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$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ではスラッグを使います。子カテゴリーだけに付いた記事も取得対象になります。
同じ基本条件から生成したコードです。先ほどのcategory__inがなくなり、category_nameが出ていることを確認しましょう。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$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を入力してください。分類名を入れると、ほかの欄を編集できるようになります。
| 画面の項目 | 入力・選択する値 | 意味 |
|---|---|---|
| 分類名 taxonomy | category | 標準カテゴリーを対象にする |
| 値の指定形式 field | slug | slugでカテゴリーを指定する |
| 分類の値 terms | b127-production | 制作情報のslugを使う |
| 比較方法 operator | IN | このカテゴリーに属する投稿を含める |
| 子の分類を含める include_children | false | 子だけの記事は含めない |

親カテゴリーへ直接付いた記事だけを取得します。子だけの記事も出したいときはtrueに切り替えます。
生成された配列では、tax_queryの中に5つの指定が入ります。次のコードはfalseを選んだ状態の未編集出力です。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$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に10 | 81・79 | 含まない |
| category_nameにb127-production | 81・80・79 | 含む |
| Tax Queryでinclude_children=false | 81・79 | 含まない |
| Tax Queryでinclude_children=true | 81・80・79 | 含む |
まず、カテゴリーIDを指定した一覧を見てみましょう。親へ直接付いた投稿81・79の2件が並び、子だけの記事80は表示されません。

category__inのID指定では、投稿81・79の2件です。tax_queryで子を含めない場合も同じ結果になります。
次に子カテゴリーも含めると、更新情報だけが付いた記事80が加わります。親と子の両方が付いた81が消えたり、二重に並んだりするわけではありません。

子を含めると投稿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へ、そのまま貼るコードではありません。
<?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カテゴリー条件を外すと投稿が出るか確認する
- 2反映先にID・slugが実在し、対象投稿へ付いているか調べる
- 3category_nameにはslug、Tax Queryにはfieldに合うtermsを指定する
- 4カテゴリー欄とTax Queryに同じ条件が残っていないか確認する
- 5post_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()を加えます。
この記事の検証情報
検証環境
- WordPress
- 7.1.4
- PHP
- 8.3.36
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年11月8日 初回公開
この記事を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。










