Amazonで商品を見る セール会場へ

WordPress│pre_get_posts フィルタで記事一覧表示を変更する方法

pre_get_postsで公開画面のメインクエリを変更する基本例です。管理画面を除外し、渡されたクエリ自身の条件を使います。以下はカテゴリの除外・検索対象・タグ一覧の件数を1つのコールバックにまとめた例です。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

必要な条件だけを残す

子テーマ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ページ目を読み直します。

タグ一覧の2ページ目に1記事が表示された画面
タグ一覧の2ページ目に1記事が表示された画面。2026年10月3日、隔離したWordPress 7.1.2 / SWELL 2.19.0で撮影。

投稿タイプを絞った検索と併用する

検索対象の指定このコード適用後
指定なし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公式資料。

  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次