【WordPress】固定ページを検索結果から除外する方法

サイト内検索を使用すると、投稿や固定ページが結果に表示されることが一般的です。しかし、特定の用途によっては、検索結果から固定ページを除外したい場合があります。この記事では、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ファイルにコードを追加するだけで、検索結果をカスタマイズし、ユーザーエクスペリエンスを向上させることができます。