サイト内検索を使用すると、投稿や固定ページが結果に表示されることが一般的です。しかし、特定の用途によっては、検索結果から固定ページを除外したい場合があります。この記事では、WordPressのテーマに少しのコードを追加することで、検索結果から固定ページを除外する方法を紹介します。
pre_get_postsフックを利用して検索結果をカスタマイズ
WordPressには、検索クエリをカスタマイズするための便利なフックとしてpre_get_postsがあります。このフックを使用することで、検索クエリに対してさまざまな変更を加えることができます。今回は、このフックを利用して、検索結果から固定ページを除外します。
テーマのfunctions.phpファイルを開く
まず、WordPressのテーマディレクトリ内にあるfunctions.phpファイルを開きます。このファイルは、テーマに特定の機能を追加するためのものです。
pre_get_postsフックを追加する
次に、以下のコードをfunctions.phpファイルの最後に追加します。
function exclude_pages_from_search($query) {
if ($query->is_search && !is_admin()) {
$query->set('post_type', 'post');
}
return $query;
}
add_action('pre_get_posts', 'exclude_pages_from_search');
コードの解説
- pre_get_postsフック: WordPressのメインクエリが実行される前に、クエリをカスタマイズするためのフックです。
- $query->is_search: 現在のクエリが検索クエリであるかどうかを確認します。
- !is_admin(): 管理画面でのクエリを除外し、フロントエンドのみで処理を実行するようにします。
- $query->set(‘post_type’, ‘post’): 検索クエリにおいて、投稿タイプを「投稿」のみに設定し、固定ページを除外します。
よくある質問(FAQ)
Q. WordPress内部検索から固定ページを除外するには?
A. pre_get_postsフックでis_search()とis_main_query()を確認し、$query->set(‘post_type’, ‘post’)のようにpostタイプのみに制限します。または検索対象のpost_typeを明示的に指定します。
Q. 特定の固定ページIDのみを検索から除外するには?
A. posts_where フィルターでSQLにWHERE条件を追加し、特定IDを除外します。またはpre_get_postsでpost__not_inに除外したいIDを追加する方法もあります。
Q. Google検索から固定ページを除外したい場合はどうすればいいですか?
A. その固定ページのSEOプラグイン設定でnoindexを設定するか、robots.txtでDisallow: /page-slug/と記述します。WordPressの内部検索とGoogle検索は別の仕組みで動作します。
まとめ
WordPressで固定ページを検索結果から除外することは、pre_get_postsフックを利用して簡単に実現できます。特定の検索結果を表示したい場合、この方法は非常に便利です。テーマのfunctions.phpファイルにコードを追加するだけで、検索結果をカスタマイズし、ユーザーエクスペリエンスを向上させることができます。
