本文へ移動

WP_Query基礎

WP_Queryのpost_type指定方法
|post・page・any・カスタム投稿の違い

WP_Queryのpost_typeは、取得するコンテンツの種類を決める引数です。post、page、any、カスタム投稿タイプの違いと、迷いやすい指定方法を整理します。

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

post_typeは取得したい種類から決める

通常の投稿ならpost、固定ページならpage、カスタム投稿なら登録されている投稿タイプのキーを指定します。複数を扱う場合は配列で明示するのが基本です。

anyは「すべての投稿タイプ・投稿状態」という意味ではありません。リビジョンや検索対象外の投稿タイプなどは含まれず、投稿状態はpost_statusで別に指定します。

post_typeは表示場所ではなく取得対象を決める

post_typeは、WP_Queryが「どの種類のコンテンツを探すか」を決める引数です。トップページに表示するからpost、固定ページの中に表示するからpage、という意味ではありません。表示場所ではなく、取得したいデータの種類で選びます。

指定しない場合の取得対象は通常postです。ただし、tax_queryを指定したクエリでは既定値がanyになります。カテゴリーやカスタムタクソノミーで絞り込む場合も、対象を限定したいならpost_typeを明示してください。tax_queryの組み方はtax_queryの基本で詳しく確認できます。

指定値取得対象主な用途注意点
post通常の投稿ブログ・お知らせの一覧固定ページは含まれない
page固定ページ子ページや案内ページの一覧通常の投稿とは別扱い
カスタム投稿タイプのキーevent、book、newsなどイベント・商品・事例の一覧表示名やURL用slugとは限らない
配列指定した複数の投稿タイプ複数種類をまとめた一覧件数・並び順・絞り込み条件は共通
any広い範囲の投稿タイプサイト内検索や横断一覧revisionや検索対象外の投稿タイプは含まれない
attachment画像やPDFなどの添付ファイルメディア一覧post_statusにも注意する

判断の軸は表示場所ではなく取得対象です。 anyは無条件の全件取得ではなく、attachmentではpost_statusも確認してください。

最初に共通の完成コードを確認する

まずは、通常の投稿を5件取得してタイトルのリンクを表示する完成形を確認します。後の節では、同じループを繰り返さず、変更する$argsだけを示します。クエリ全体の読み方を先に確認したい場合はWP_Queryの基本構文を参照してください。

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

PHPpost-type-post.php通常の投稿を5件取得してタイトルを表示する完成例
$args = [   'post_type'      => 'post',   'posts_per_page' => 5,]; $post_type_query = new WP_Query( $args ); if ( $post_type_query->have_posts() ) {   echo '<ul>';    while ( $post_type_query->have_posts() ) {      $post_type_query->the_post();       echo '<li><a href="' . esc_url( get_permalink() ) . '">';      echo esc_html( get_the_title() );      echo '</a></li>';   }    echo '</ul>';} else {   echo '<p>投稿は見つかりませんでした。</p>';} wp_reset_postdata();

このコードで取得対象を決めているのが’post_type’ => ‘post’です。posts_per_pageは投稿タイプごとではなく、クエリ全体の取得件数を表します。

値ごとの違いと$argsの書き方

postは通常の投稿を取得する

ブログ記事やお知らせを通常の投稿として管理している場合はpostを指定します。上の完成コードがそのまま基本形です。固定ページやカスタム投稿タイプは含まれません。

pageは固定ページを取得する

固定ページだけを取得する場合はpageを指定します。親ページに属する子ページを並べるときはpost_parent、管理画面で設定した順番を使うときはorderby => ‘menu_order’も検討します。

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

PHPpost-type-page-args.php固定ページを取得する$argsの差分
$args = [   'post_type'      => 'page',   'posts_per_page' => 5,   'orderby'        => 'menu_order',   'order'          => 'ASC',];

カスタム投稿タイプは登録キーを指定する

カスタム投稿を取得するときは、register_post_type()の第1引数に使われている投稿タイプのキーを指定します。管理画面で「イベント」と表示されていても、登録キーがeventなら指定する値はeventです。

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

PHPpost-type-event-args.phpカスタム投稿タイプeventを取得する$argsの差分
$args = [   'post_type'      => 'event',   'posts_per_page' => 6,];

投稿タイプのキーは、テーマやプラグインにあるregister_post_type()の第1引数で確認するのが確実です。投稿タイプ作成プラグインを使っている場合は、その設定画面や公式資料を確認します。管理画面URLのpost_type=以降も手掛かりになりますが、登録設定と照合してください。

投稿タイプの登録キー、rewriteで設定するURL用slug、個別記事のslugは別の値にできます。WP_Queryへ指定するのは投稿タイプの登録キーです。

キーを指定しても表示されない場合は、公開状態や登録設定も確認します。

複数の投稿タイプは配列で明示する

通常の投稿とカスタム投稿をまとめて取得する場合は、post_typeへ配列を指定します。

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

PHPpost-type-multiple-args.phppostとnewsをまとめて取得する$argsの差分
$args = [   'post_type'      => [ 'post', 'news' ],   'posts_per_page' => 10,];

この例は、postnewsを合わせて最大10件取得します。投稿タイプごとに10件ではありません。並び順やカテゴリーなどの条件も両方へ共通して適用されるため、混在させる前に共通の基準で表示できるかを確認しましょう。

anyは便利だが万能な全部指定ではない

anyは、複数の投稿タイプを広く対象にする指定です。ただし、リビジョンとexclude_from_searchtrueの投稿タイプは対象外です。あとから検索対象のカスタム投稿タイプが追加されると、意図せず一覧へ混ざる可能性もあります。

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

PHPpost-type-any-args.phpanyを指定する$argsの差分
$args = [   'post_type'      => 'any',   'posts_per_page' => 10,];

なお、post_type => ‘any’は投稿タイプの範囲、post_status => ‘any’は投稿状態の範囲を指定します。どちらも文字どおりの「全件」ではなく除外対象があるため、取得要件が決まっているなら値を明示する方が意図を保ちやすくなります。

attachmentは状態と種類も絞り込む

画像やPDFなどはattachmentという投稿タイプです。添付ファイルは通常inheritという投稿状態で扱われるため、post_statusも合わせて指定します。画像だけを対象にするならpost_mime_typeも使えます。

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

PHPpost-type-attachment-args.php画像の添付ファイルを取得する$argsの差分
$args = [   'post_type'      => 'attachment',   'post_status'    => 'inherit',   'post_mime_type' => 'image',   'posts_per_page' => 10,];

post_typeを決める順番

最初からanyを選ぶのではなく、取得したいコンテンツを言葉にしてから値へ置き換えると、指定ミスを減らせます。

迷ったときの判断順

  1. 1
    通常の投稿だけならpostを指定する
  2. 2
    固定ページだけならpageを指定する
  3. 3
    カスタム投稿なら登録キーを確認して指定する
  4. 4
    複数を混ぜるなら配列で明示する
  5. 5
    横断検索など必要な場合だけanyを検討する

WP Query Builderでは、Post Typeでpostpageanycustom(手入力)を選べます。複数のカスタム投稿タイプは手入力欄へカンマ区切りで指定します。Builderでanyを選んだ場合も除外条件は同じで、投稿状態はPost Statusで別に決めます。

通常の投稿と事例だけを出したいなら、anyではなく[ ‘post’, ‘case_study’ ]のように配列で書くと、後から読んだ人にも意図が伝わります。対象が増えたときも、変更箇所を追いやすくなります。

表示されない・混ざる時の確認ポイント

post_typeの間違いは、エラーではなく「0件になる」「必要な投稿が出ない」「別の投稿が混ざる」という形で現れやすい問題です。まずpost_typeだけの最小構成で取得できるか確認し、その後に分類や並び順の条件を戻します。

症状よくある原因確認すること
固定ページが表示されないpostのままになっているpageを指定する
カスタム投稿が表示されない表示名やURL用slugを指定している登録キーと公開状態を確認する
想定外の投稿が混ざるanyや配列の対象が広い必要な投稿タイプだけを明示する
複数指定で件数が合わない投稿タイプごとの件数だと考えているposts_per_pageは合計件数として確認する
添付ファイルが出ないpost_statusを指定していないinheritと必要なmime typeを確認する

条件を減らしても0件なら、投稿が表示されない時のチェックリストで、クエリの実行・公開状態・ID・分類条件を順番に切り分けてください。

公式資料で仕様を確認する

anyの除外対象、添付ファイルの投稿状態、カスタム投稿タイプの登録設定は、サイト構成によって結果へ影響します。迷ったときは次の公式資料で確認してください。

公式リンク

公式ドキュメント

取得対象を明示してから条件を加える

post_typeは、WP_Queryで取得するコンテンツの種類を決めます。通常の投稿はpost、固定ページはpage、カスタム投稿は登録キー、複数は配列で指定します。

anyは横断検索では便利ですが、すべてを無条件に取得する値ではありません。まず必要な投稿タイプを明示し、取得できることを確認してから分類や並び順の条件を加えると、原因を切り分けやすくなります。

実装後に確認すること

  • 必要な投稿タイプだけが表示される
  • 不要な投稿タイプが混ざらない
  • 複数指定の表示件数を合計で確認した
  • 公開状態の違う投稿が意図せず含まれない
  • attachmentは実際のmime typeと状態で確認した
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はサイト・記事制作に使います。支援の有無で、読める内容や使える機能は変わりません。