WordPressの検索ブロックで検索結果を固定ページのみに限定する方法

WordPressの検索機能は、デフォルトでは投稿・固定ページ・カスタム投稿タイプなど、すべてのコンテンツタイプを対象に検索を行います。しかし、特定の用途においては、検索結果を固定ページのみに限定したい場合があります。この記事では、検索ブロックを使用して検索結果を固定ページのみに制限する方法を、コードを用いた方法とプラグインを使用した方法の2つのアプローチで解説します。

検索フォームにhiddenフィールドを追加する方法

WordPressの検索フォームにpost_typeパラメータを追加することで、検索対象を特定の投稿タイプに限定できます。以下のように、検索フォームにhiddenフィールドを追加します。

<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
  <label>
    <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ); ?></span>
    <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ); ?>" value="<?php echo get_search_query(); ?>" name="s" />
  </label>
  <input type="hidden" name="post_type" value="page" />
  <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" />
</form>

この方法は、特定の検索フォームに対してのみ検索対象を固定ページに限定したい場合に有効です。

functions.phpにフィルターを追加する方法

サイト全体の検索結果を固定ページのみに制限したい場合は、functions.phpに以下のコードを追加します。

function limit_search_to_pages( $query ) {
  if ( $query->is_search() && $query->is_main_query() && !is_admin() ) {
    $query->set( 'post_type', 'page' );
  }
}
add_action( 'pre_get_posts', 'limit_search_to_pages' );

このコードは、管理画面以外の検索クエリに対して、投稿タイプを固定ページに設定します。

SearchWPプラグインを使用する方法

より柔軟な検索制御を求める場合は、SearchWPプラグインの使用を検討してください。SearchWPを使用すると、検索対象の投稿タイプをGUIで簡単に設定できます。

  1. SearchWPプラグインをインストールして有効化します。
  2. WordPressダッシュボードの「SearchWP」→「設定」に移動します。
  3. 「ソースと設定」セクションで、「投稿」や「メディア」などのチェックを外し、「ページ」のみを選択します。
  4. 設定を保存します。

この方法により、検索結果を固定ページのみに限定できます。

注意点と補足

  • テーマやプラグインによっては、検索結果の表示に独自のテンプレートを使用している場合があります。その場合、上記の方法が正しく機能しないことがあります。
  • カスタム投稿タイプを使用している場合は、post_typeパラメータにカスタム投稿タイプのスラッグを指定することで、検索対象を制御できます。
  • SearchWPは有料プラグインですが、無料の代替プラグインとして「Relevanssi」や「Ivory Search」などもあります。

まとめ

WordPressの検索機能を固定ページのみに限定する方法は、検索フォームにhiddenフィールドを追加する方法や、functions.phpにフィルターを追加する方法、SearchWPプラグインを使用する方法などがあります。これらの方法を適切に組み合わせることで、ユーザーにとってより使いやすい検索体験を提供できます。サイトの目的やユーザーのニーズに合わせて、最適な方法を選択してください。