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_typeをpostに指定することで、投稿記事のみが検索対象になる
カスタム投稿タイプも含める場合
カスタム投稿タイプの記事も検索対象にしたい場合は、配列で指定します。
$query->set('post_type', array('post', 'news', 'blog'));
注意点
functions.phpを編集する前に、バックアップを取っておくことをおすすめしますpre_get_postsはWordPressのクエリを直接書き換えるフックなので、条件分岐を正確に書かないと意図しないページに影響する可能性があります
検索フォームのカスタマイズ方法は、検索フォームをカスタマイズする方法を参照してください。