pre_get_postsで公開画面のメインクエリを変更する基本例です。管理画面を除外し、渡されたクエリ自身の条件を使います。以下はカテゴリの除外・検索対象・タグ一覧の件数を1つのコールバックにまとめた例です。
必要な条件だけを残す
子テーマfunctions.phpなどへ追加します。既存PHP内では開始タグを省きます。travel、foo、123、456は例示値なので実際のスラッグ・IDへ変更します。不要なifブロックは削除してください。
function waza_public_query_examples($q) {
if (is_admin() || !$q->is_main_query() || (defined('REST_REQUEST') && REST_REQUEST)) return;
if ($q->is_category('travel')) {
$current = (array) $q->get('category__not_in');
$q->set('category__not_in', array_values(array_unique(array_merge(array_map('absint', $current), array(123,456)))));
}
if ($q->is_search() && !$q->get('post_type')) {
$q->set('post_type', array('post','page'));
}
if ($q->is_tag('foo')) $q->set('posts_per_page', 30);
}
add_action('pre_get_posts', 'waza_public_query_examples');
上書きと除外の範囲
カテゴリ除外は既存のcategory__not_inと結合します。検索対象はpost_typeが指定されていない検索でだけ投稿と固定ページに設定し、制作事例などの明示的な指定を保ちます。タグの表示件数は、この例の値で上書きします。別の絞り込みコードと併用する場合は実行順序と最終値を確認してください。RESTと管理画面は対象外です。
アクセス制御には使わない
一覧から消しても、記事の直接URLや別の取得経路から閲覧できます。会員限定コンテンツには、一覧の絞り込みとは別に認可処理が必要です。
検索対象とタグの2ページ目を確認する
| 操作 | 確認する結果 |
|---|---|
| 同じ語を含む投稿と固定ページを検索 | 両方が検索結果に出る |
| 対象タグに31記事を用意 | 1ページ目30件、2ページ目1件 |
| ページ番号をEnterで開く | URLのpagedと表示記事が切り替わる |
検索結果に固定ページを含めたい場合は検索の条件を残し、タグの表示件数を変えたい場合はタグの条件だけを残します。
対象のタグ名fooは、実際のタグのスラッグに置き換えてください。
2026年10月3日の隔離したWordPress 7.1.2 / SWELL 2.19.0では、同じ識別語を持つ投稿と固定ページの2件が検索結果に出ました。
検証専用タグへ31記事を割り当てると、実HTTPの一覧は30件と1件に分かれ、ページ番号をEnterキーで開いて2ページ目へ移動できました。
カテゴリー除外、検索対象、タグの件数は別の条件です。
件数だけの確認で、除外や閲覧制限まで動作したと判断しないでください。
戻すときは追加したpre_get_postsの登録を無効にし、検索と対象タグの1・2ページ目を読み直します。

投稿タイプを絞った検索と併用する
| 検索対象の指定 | このコード適用後 |
|---|---|
| 指定なし | postとpageを検索 |
| works、またはworksだけの配列 | worksを維持 |
| postとworksの配列 | 両方の指定を維持 |
post_typeを毎回postとpageで上書きすると、worksに絞った検索まで通常投稿と固定ページの検索へ変わります。
掲載例では、検索対象が空のときだけ既定の対象を設定します。
先に動いたpre_get_postsが検索対象を設定した場合も、その指定を保ちます。
隔離したWordPress 7.1.2 / SWELL 2.19.0では、worksだけの検索、配列指定、postとの混合指定を実クエリで比較しました。
検索結果の表示形式を変える例との併用でも、worksだけならカード型、混合なら保存済みの一覧形式になります。
導入先では、検索フォームが渡したpost_typeと取得結果を照合してください。
後から動く別の処理が再び上書きする場合は、その処理の条件を合わせて調整します。
戻すときは今回追加した関数とフック登録を無効にします。
確認と戻し方
対象カテゴリ・対象外カテゴリ、検索、タグ、ページ送り、管理画面で意図した結果を確認します。戻す場合はこの関数とフック登録を外します。参照:pre_get_posts公式資料。



