【WordPress】検索結果に固定ページを表示しない方法(投稿記事のみに絞る)

/

WordPressの検索結果に固定ページ(会社概要やプライバシーポリシーなど)が混ざって表示されてしまうのを防ぐ方法です。functions.phpに数行追加するだけで対応できます。

コード

functions.phpに以下を追記します。

function search_filter_post_type($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_search()) {
        $query->set('post_type', 'post');
    }
}
add_action('pre_get_posts', 'search_filter_post_type');

解説

  • is_admin() — 管理画面では動作させない
  • $query->is_main_query() — メインクエリのみ対象(サイドバーのウィジェット等には影響しない)
  • $query->is_search() — 検索結果ページのみ対象
  • post_typepostに指定することで、投稿記事のみが検索対象になる

カスタム投稿タイプも含める場合

カスタム投稿タイプの記事も検索対象にしたい場合は、配列で指定します。

$query->set('post_type', array('post', 'news', 'blog'));

注意点

  • functions.phpを編集する前に、バックアップを取っておくことをおすすめします
  • pre_get_postsはWordPressのクエリを直接書き換えるフックなので、条件分岐を正確に書かないと意図しないページに影響する可能性があります

検索フォームのカスタマイズ方法は、検索フォームをカスタマイズする方法を参照してください。