0件なら最初に引数とID・slugを確認する
まずコードの$argsを開き、WordPress管理画面の「投稿 > カテゴリー」でIDとスラッグを調べます。catとcategory__inにはカテゴリーID、category_nameにはカテゴリーslugを指定します。
値が合っているのに0件や別カテゴリー混在が続く場合は、子カテゴリーを含む範囲、tax_query、post_type、追加条件の順に外して確認します。カスタムタクソノミーは通常のカテゴリー引数ではなくtax_queryで指定します。
0件・別カテゴリー混在・子カテゴリーの症状を分ける
投稿が出ない、別カテゴリまで混ざる、子カテゴリの扱いが違う、カスタム投稿だけ効かない、という症状ごとに確認先を分けます。
| 症状 | 最初に疑う原因 | 確認する場所 |
|---|---|---|
| 投稿が1件も出ない | カテゴリIDとslugの取り違え、post_type違い、公開状態違い | $args の cat / category_name / post_type |
| 別カテゴリの記事も出る | OR条件になっている、カテゴリ指定が広すぎる、子カテゴリを含んでいる | cat、category_name、tax_query の指定 |
| 子カテゴリの記事が出たり出なかったりする | 子カテゴリを含む指定と含まない指定の混同 | cat / category_name と category__in の違い |
| カスタム投稿だけ出ない | その投稿タイプにカテゴリーが紐づいていない、投稿タイプ指定が違う | 投稿タイプ登録と post_type |
| カスタム分類で効かない | 通常のカテゴリー引数を使っている | tax_query の taxonomy |
カテゴリ以外のtaxonomyも含む基本構文はtax_queryの使い方で確認できます。複数条件を組み合わせている場合は、relationのAND / ORの違いも条件を1つに戻した後で確認してください。
WP_Queryのカテゴリ指定には、似た名前の引数がいくつもあります。cat、category_name、category__in、category__and、category__not_in は、どれもカテゴリーに関係しますが、受け取る値と動きが同じではありません。
原因1: IDとslugを取り違えている
catにはカテゴリID、category_nameにはカテゴリslugを使います。表示名が「ニュース」でslugがnewsの場合、category_nameに入れるのはnewsです。日本語の表示名をそのまま入れると、期待通りに一致しないことがあります。
表示名とslugは同じとは限りません。コードへ入れる前に、管理画面の「スラッグ」列を確認してください。category__in や category__and も、基本的にはカテゴリIDの配列を使います。slugで指定したいなら category_name か、tax_query で field を slug にする方法を検討します。
次の一覧では、表示名「イベント案内」の行にslugのeventsと数値のIDが別々に表示されています。自分のサイトでも同じ列を見て、コードへ渡す値を選んでください。

category_nameには「スラッグ」列、catやcategory__inには「ID」列の値を使います。
原因2: 子カテゴリを含むかどうかを誤解している
公式リファレンスでは、catやcategory_nameは子カテゴリも対象に含む指定として説明されています。一方、category__inは指定したカテゴリIDそのものを対象にし、子カテゴリを自動では含めません。
そのため、「親カテゴリだけを指定したのに子カテゴリの記事も出る」場合は cat や category_name の動きを疑います。逆に、「親カテゴリを指定したのに子カテゴリの記事が出ない」場合は category__in を使っていないか確認します。
原因3: カテゴリーではなくカスタムタクソノミーを絞り込もうとしている
通常の投稿カテゴリーは category タクソノミーです。しかし、商品ジャンル、制作実績の種類、イベント地域などを独自に作っている場合、それはカスタムタクソノミーかもしれません。
カスタムタクソノミーを通常の cat や category_name で絞り込もうとしても、意図した結果になりません。その場合は tax_query で taxonomy、field、terms を明示します。
原因4: カテゴリ以外の条件で0件になっている
カテゴリ指定だけは正しくても、post_type、post_status、meta_query、tax_query の別条件、検索キーワード、日付条件などが同時に入っていると、結果が0件になることがあります。
特に、カスタム投稿を対象にしているのにpost_typeがpostのままなら取得できません。カテゴリ以外の条件を外して確認します。
まず試す最小例
ここでは、通常の投稿カテゴリーをslugで絞り込む最小例を使います。テンプレートファイル内で「このカテゴリだけ取れるか」を見るための確認コードです。news はサンプルなので、実際のカテゴリslugに置き換えてください。
この段階では、meta_query や複数カテゴリ条件を足さないでください。まずは1つのカテゴリだけで取得できるかを確認します。
原因を切り分けるための一時的な確認コードです。ローカルなどの検証環境だけで使い、確認後は削除してください。
$args = [ 'post_type' => 'post', 'posts_per_page' => 5, 'category_name' => 'news',]; $category_query = new WP_Query( $args ); if ( $category_query->have_posts() ) { while ( $category_query->have_posts() ) { $category_query->the_post(); echo esc_html( get_the_title() ) . '<br>'; } wp_reset_postdata();} else { echo '指定したカテゴリの投稿は見つかりませんでした。';}このコードのポイントは、category_nameにカテゴリの表示名ではなくslugを入れている点です。また、posts_per_pageを小さくして、条件が効いているかを確認しやすくしています。
この最小例で投稿が出るなら、カテゴリslug自体は合っている可能性が高いです。次は、元のコードに戻して、追加している条件のどれが結果を変えているかを1つずつ戻します。
原因別の対処法
同じ「カテゴリ絞り込み」と言っても、IDで指定したいのか、slugで指定したいのか、子カテゴリを含めたいのかで選ぶ引数が変わります。
IDで指定するか、slugで指定するかを決める
カテゴリIDで絞り込むなら cat または category__in を使います。slugで絞り込むなら category_name が分かりやすいです。
| やりたいこと | 使う引数 | 指定する値 |
|---|---|---|
| カテゴリID 4 の投稿を出す | cat | 4 |
| slug が news の投稿を出す | category_name | news |
| ID 2 または 6 の投稿を出す | category__in | array( 2, 6 ) |
| ID 2 と 6 の両方に属する投稿を出す | category__and | array( 2, 6 ) |
| カテゴリID 2 と 6 を除外する | category__not_in | array( 2, 6 ) |
category__and は「どちらか」ではなく「両方」です。ここを勘違いすると、投稿が急に少なくなったり、0件になったりします。複数カテゴリの条件では、まず OR なのか AND なのかを言葉で確認しましょう。
category_nameでも複数のslugを指定できます。news,eventsはどちらかのカテゴリー、news+eventsは両方のカテゴリーに属する投稿が対象です。条件が増えて読みづらくなる場合や、子カテゴリーを含める範囲まで明示したい場合は、category__inやcategory__and、またはtax_queryを使うと意図を追いやすくなります。
tax_queryでカテゴリーを指定する
複数条件に発展しそうな場合や、カテゴリー以外のタクソノミーも一緒に扱う場合は、tax_query で書くと意図を明示しやすくなります。
次のコードは、通常のカテゴリーを tax_query で絞り込む例です。taxonomy に category、field に slug、terms にカテゴリslugを指定しています。
クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。
$args = [ 'post_type' => 'post', 'posts_per_page' => 5, 'tax_query' => [ [ 'taxonomy' => 'category', 'field' => 'slug', 'terms' => [ 'news' ], 'operator' => 'IN', 'include_children' => false, ], ],]; $category_query = new WP_Query( $args );このコードのポイントは、taxonomyとfieldに加え、operatorとinclude_childrenも明示している点です。operator => ‘IN’は指定タームのいずれかに属する投稿、include_children => falseは子タームを自動で含めない指定です。tax_queryのinclude_childrenは既定でtrueなので、親だけに限定したい時は意図をコードに残します。
slugに自信がない場合は、管理画面のカテゴリー一覧、get_category_by_slug()、get_term_by()のいずれかで、対象タームが存在するか確認します。
カスタム投稿でカテゴリが出ない場合
カスタム投稿タイプで通常のカテゴリーを使いたい場合、その投稿タイプがcategoryタクソノミーに登録されている必要があります。register_post_type()のtaxonomies、またはregister_taxonomy_for_object_type()で関連付けられていないと、管理画面でカテゴリを付けられず、クエリ条件だけ直しても対象投稿は増えません。
WP_Query側でもpost_typeを対象の投稿タイプにする必要があります。通常投稿だけを対象にしたままでは、カスタム投稿は検索対象に入りません。原因を切り分けるための一時的な確認コードです。ローカルなどの検証環境だけで使い、確認後は削除してください。
$args = [ 'post_type' => 'works', 'posts_per_page' => 5, 'category_name' => 'news',]; $works_query = new WP_Query( $args );このコードのポイントは、post_typeをworksに変えている点です。ただし、これは投稿タイプworksが通常のカテゴリーを使える前提の例です。対象投稿IDにwp_get_post_terms( $post_id, ‘category’ )を使い、実際にカテゴリが割り当てられているかも確認してください。
切り分けの順番
カテゴリ絞り込みが効かないときは、複雑なコードを何度も書き換えるより、条件を減らしてから1つずつ戻す方が原因を特定しやすくなります。特にtax_query、meta_query、ページネーション、pre_get_postsが絡んでいると、どれが原因か分かりにくくなります。
次の順番で確認すると、カテゴリ指定そのものの問題か、それ以外の条件の問題かを分けやすくなります。
切り分け手順
- 1対象カテゴリのslugとIDを管理画面で確認する
- 2対象投稿IDに実際のカテゴリが割り当てられているか確認する
- 3post_type => post と category_name だけの最小例で試す
- 4表示されたら元コードの条件を1つずつ戻す
- 5カスタム投稿なら投稿タイプとタクソノミーの関連付けを確認する
- 6tax_queryではoperatorとinclude_childrenを要件に合わせる
- 7メインクエリならpre_get_postsの条件分岐を確認する
公式資料で確認したいポイント
カテゴリまわりの引数は、公式リファレンスのWP_Queryページにまとまっています。特にcat、category_name、category__in、category__and、category__not_inの違いは、本文と公式資料を照らし合わせると対象範囲を判断しやすくなります。
tax_query を使う場合は、WP_Query内のTaxonomy Parametersと、WP_Tax_Queryのページも確認しておくと、field、terms、operator、include_children の意味を追いやすくなります。
公式リンク
公式ドキュメント
最後のチェックリスト
IDとslug、子カテゴリ、カスタムタクソノミーを確認しても結果が違う場合は、別のtax_query、meta_query、pre_get_posts、テンプレート側のループを1つずつ戻します。
カテゴリ絞り込みの最終判断
- 標準カテゴリとカスタムタクソノミーを取り違えていない
- IDとslugのどちらを渡す引数か確認した
- 子カテゴリを含む範囲が要件と合っている
- 他の条件を戻した後も件数と対象投稿を比較した
- サブループ後の表示が崩れないことを確認した
この記事の検証情報
検証環境
- WordPress
- 7.1
- PHP
- 8.3.33
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年9月1日 初回公開
この記事を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。


