まず結論
post_status は、WP_Query で取得する投稿の状態を指定する引数です。通常の公開済み投稿だけを出したい時は publish、下書きを確認したい時は draft、非公開投稿を扱う時は private、予約投稿を扱う時は future のように、目的に合わせて指定します。
post_status を理解すると、「投稿タイプは合っているのに投稿が表示されない」という原因を切り分けやすくなります。たとえば post_type が正しくても、対象の投稿が下書きや予約投稿なら、公開済みだけを取得するクエリには出てきません。
初心者が迷いやすいのは、WordPress の管理画面では投稿が見えているのに、フロント側の一覧には出てこないケースです。この時は、投稿タイプ、件数、絞り込み条件だけでなく、投稿の公開状態も確認します。
post_status は何を指定する引数か
post_status は、投稿がどの状態にあるかを指定する WP_Query の引数です。公開済み、下書き、非公開、予約投稿、ゴミ箱内の投稿など、WordPress の投稿には複数の状態があります。
通常のサイト表示で使う一覧では、公開済みの投稿だけを出すことが多いため、publish を指定するのが基本です。管理用の確認画面や独自の一覧では、下書きや予約投稿も含めて取得したい場合があります。
ここで大事なのは、post_status は「投稿の種類」ではなく「投稿の状態」を指定することです。投稿の種類を指定するのは post_type、公開済みか下書きかを指定するのが post_status です。
たとえば通常投稿の公開済みだけを取得するなら、post_type は post、post_status は publish です。カスタム投稿タイプの公開済みだけを取得するなら、post_type にカスタム投稿タイプ名を入れ、post_status に publish を指定します。
| 指定値 | 意味 | よく使う場面 |
|---|---|---|
publish | 公開済み | 通常の記事一覧やフロント側の一覧で使う |
draft | 下書き | 管理用の確認や、公開前の記事を確認したい時に使う |
pending | レビュー待ち | 承認フローのあるサイトで確認したい時に使う |
future | 予約投稿 | これから公開される投稿を確認したい時に使う |
private | 非公開 | 権限のあるユーザー向けの一覧で扱う時に使う |
trash | ゴミ箱 | 削除済み扱いの投稿を確認したい時に使う |
inherit | 親の状態を継承 | 添付ファイルなどで関係することがある |
any | 複数の状態を広く対象にする指定 | 状態をまたいで確認したい時に使う |
post_type、post_status、post_password との違い
post_status と混同しやすいのが、post_type です。post_type は通常投稿、固定ページ、カスタム投稿タイプなどの「種類」を指定します。post_status は公開済み、下書き、非公開などの「状態」を指定します。
もうひとつ近いものに、パスワード保護に関係する条件があります。パスワード保護された投稿は、公開状態だけで判断できない場合があるため、必要に応じて has_password や post_password も確認します。
any にも注意が必要です。any は状態を広く対象にしたい時の候補ですが、通常の公開一覧で何でも取得したいからといって安易に使う指定ではありません。公開ページでは、原則として必要な状態だけを明示したほうが安全です。
特にフロント側に出す一覧では、下書きや非公開投稿を意図せず表示しないことが重要です。状態をまたいで確認したい場合は、管理者向けの画面や検証用コードとして扱うほうが安全です。
Builder での扱い
WP Query Builder では、post_status は取得対象の安全性に関わる基本条件として扱う想定です。通常の公開ページ向けなら publish を初期値にし、必要がある場合だけ draft、future、private などを選ぶ流れが分かりやすいです。
Builder で post_status を選べるようにする場合、初心者には「公開済みだけ」「下書きも含める」「予約投稿だけ」のような言葉で見せるほうが理解しやすくなります。内部的には、それぞれ publish、draft、future などの値へ対応させます。
Builder で複数の状態を選べる場合も、最初は publish だけで結果が出るかを確認するのがおすすめです。取得できることを確認してから状態を広げると、どの指定で結果が変わったのか追いやすくなります。
使いどころ・避けどころと実践確認
公開、下書き、非公開など、取得対象に含める投稿状態を明示する時に使います。
権限確認を省く目的で any を使ったり、閲覧者へ見せてよい状態の判断をWP_Queryだけへ任せたりしません。
ログイン状態や投稿タイプによって読める post_status が異なるため、本番と異なる管理者セッションだけで確認しません。
管理者には見える下書きが一般公開では見えないため、匿名閲覧でも同じ結果かを分けて確認します。
同じ内容で公開・下書き・非公開の投稿を作り、匿名利用者と編集者の両方で取得できた投稿IDと表示可否を記録します。
WordPressの仕様で確認するポイント
公式資料では、WP_Query の post_status は Status Parameters の中で説明されています。publish、pending、draft、auto-draft、future、private、inherit、trash、any など、指定できる値を確認できます。
投稿の現在の状態を取得したい場合は、get_post_status() の公式リファレンスを確認します。独自の投稿ステータスを登録したい場合は、register_post_status() を見ると、WP_Query の取得条件とは別に、ステータスそのものを登録する処理を確認できます。
公式リンク
公式ドキュメント
post_status は、公開ページで意図しない投稿を出さないためにも重要な引数です。通常の一覧では publish を基本にし、下書きや非公開、予約投稿を扱う時は、その画面を誰が見るのかを先に確認します。
迷った時は、まず post_type、post_status、posts_per_page だけの最小構成に戻ります。そこで取得できることを確認してから、分類やカスタムフィールドの条件を追加すると、原因を見失いにくくなります。
post_status の最終チェック
- 公開ページ向けの一覧では
publishを基本にしている - 投稿の種類は
post_type、投稿の状態はpost_statusと分けて確認した - 下書き、非公開、予約投稿を含める場合は表示対象と権限を確認した
- まずは
post_type、post_status、posts_per_pageだけの最小構成で確認した - 状態を広く拾うためだけに
anyを安易に使っていない
公式リファレンス
仕様や原文の説明も確認したいときは、公式ドキュメントと整理ページをあわせて見ると理解しやすくなります。
この記事の検証情報
検証環境
- WordPress
- 7.1
- PHP
- 8.3.33
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年5月26日 glossary 用の初回ドラフトを作成
この用語を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。
他の用語も続けて確認できます
似た用語や周辺知識をまとめて見たいときは、用語集トップから探すと迷いにくくなります。