サイト内検索を使用すると、投稿や固定ページが結果に表示されることが一般的です。しかし、特定の用途によっては、検索結果から固定ページを除外したい場合があります。この記事では、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’): 検索クエリにおいて、投稿タイプを「投稿」のみに設定し、固定ページを除外します。
まとめ
WordPressで固定ページを検索結果から除外することは、pre_get_postsフックを利用して簡単に実現できます。特定の検索結果を表示したい場合、この方法は非常に便利です。テーマのfunctions.phpファイルにコードを追加するだけで、検索結果をカスタマイズし、ユーザーエクスペリエンスを向上させることができます。