まず結論
post__not_in は、指定した投稿IDを取得結果から除外する WP_Query 引数です。関連記事から現在の記事を外す時などに使います。
post__in との同時指定はできません。含める一覧を作るのか、広い候補から一部を外すのかを先に決めます。
どういう時に使うか
関連記事で閲覧中の記事を除外する、掲載停止候補だけ外す、別枠で表示済みの記事を次の一覧から外す、といった場面で使います。
現在の記事IDを使う時は、ループ内外のどの $post を参照しているかに注意します。独自ループでグローバル値が変わっていると別IDを除外することがあります。
除外IDが増え続ける設計は保守しにくいため、タクソノミーやステータスで表せる条件ならそちらも検討します。
近い引数との違い
post__not_in はID単位の除外です。カテゴリーやタグ単位なら tax_query、カスタムフィールド条件なら meta_query が役割に合います。
post__in との併用で差集合を作るのではなく、必要ならPHP側でID配列を整理してから片方だけを渡します。
Builderでの扱い
WP Query Builder では除外IDを複数入力できます。数値以外と重複値を除いてからコードへ出します。
現在の記事を自動除外する用途では、固定IDの入力と実行時の get_the_ID() を同じものとして扱わないようにします。
使いどころ・避けどころと実践確認
現在の記事や既表示の記事など、特定IDだけを取得候補から除外したい時に使います。
post__in と同じIDを同時に渡したり、大量IDを除外し続ける設計へ安易に使ったりしません。
除外後に posts_per_page で指定した件数分の候補が残らず、表示不足を不具合と誤認することがあります。
除外後に必要件数を満たせるだけの候補が残っているかまで確認すると、表示不足を不具合と誤認しません。
除外前後に取得できた投稿ID、候補総数、指定した除外IDを並べ、除外以外の条件が同一か確認します。
WordPressの仕様で確認するポイント
公式の Post & Page Parameters で、ID配列の形式と post__in との併用不可を確認します。
現在記事の除外例では、クエリを作る時点の投稿IDが正しいかもコード側で確認します。
公式リンク
公式ドキュメント
最後は、値を変える目的と、変えた時に失う情報を一緒に確認します。
最後に確認したいこと
- 除外する投稿IDを整数配列にした
- post__inと併用していない
- 現在記事IDを正しい文脈で取得した
- 分類条件で表す方が自然でないか検討した
公式リファレンス
仕様や原文の説明も確認したいときは、公式ドキュメントと整理ページをあわせて見ると理解しやすくなります。
この記事の検証情報
検証環境
- WordPress
- 7.1
- PHP
- 8.3.33
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年5月26日 glossary 用の初回ドラフトを作成
- 2026年8月15日 公式資料を再確認し、用語集として本文と判断材料を再構成
この用語を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。
他の用語も続けて確認できます
似た用語や周辺知識をまとめて見たいときは、用語集トップから探すと迷いにくくなります。