【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’): 検索クエリにおいて、投稿タイプを「投稿」のみに設定し、固定ページを除外します。

よくある質問(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ファイルにコードを追加するだけで、検索結果をカスタマイズし、ユーザーエクスペリエンスを向上させることができます。