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 フィルターを使えば簡単に実装できるので、サイト構成に合わせた検索の最適化にぜひ活用してください。