【WordPress】固定ページを検索結果から除外する方法|投稿だけを対象にする設定方法

【WordPress】固定ページを検索結果から除外する方法|投稿だけを対象にする設定方法 WordPress

WordPressのデフォルトの検索機能では、「投稿」だけでなく「固定ページ」も検索対象に含まれます。しかし、会社概要やお問い合わせページなどの固定ページは、検索結果に表示したくないというケースも少なくありません。

この記事では、検索結果に表示される投稿タイプを「投稿(post)」のみに限定し、固定ページ(page)を除外する方法を紹介します。

pre_get_posts フィルターで投稿タイプを制限

検索結果のクエリが実行される前に、pre_get_posts アクションを使って検索クエリに手を加えることで、固定ページを除外できます。

コード例(functions.phpに記述)

function exclude_pages_from_search($query) {
  if ($query->is_search() && $query->is_main_query()) {
    $query->set('post_type', 'post'); // 投稿のみに限定
  }
}
add_action('pre_get_posts', 'exclude_pages_from_search');
  • $query->is_search():検索結果ページであることを判定
  • $query->is_main_query():メインクエリのみ対象とする(サブクエリには影響させない)
  • $query->set(‘post_type’, ‘post’):検索対象を投稿タイプ「post(投稿)」に限定する

投稿・カスタム投稿は対象に含めたい場合

投稿だけでなく、独自のカスタム投稿タイプも検索対象に含めたい場合は、以下のように配列で指定します。

$query->set('post_type', array('post', 'news', 'product'));
  • この方法はテーマの functions.php に記述することで有効になります。
  • 使用している検索プラグインによっては、クエリが上書きされる場合があります。プラグインを併用している場合は競合に注意しましょう。
  • キャッシュ系プラグインを利用している場合、変更が反映されないことがあるため、キャッシュのクリアも忘れずに。

まとめ

WordPressの検索結果から固定ページを除外することで、より適切な検索体験を提供できます。pre_get_posts フィルターを使えば簡単に実装できるので、サイト構成に合わせた検索の最適化にぜひ活用してください。