検索フォームにエンジン選択ドロップダウンボックスを追加
SearchWP の最も人気のある機能の 1 つは、複数の検索エンジンを作成できることです。多くの場合、複数のエンジンは複数の検索フォームにつながり、それぞれに独自の検索結果テンプレートがあります。SearchWP では、代わりに任意の検索エンジンにデフォルトの検索フォームと結果テンプレートを使用することも可能です。
この記事では、検索フォームにエンジン ドロップダウンを追加するための3 つの異なるアプローチをどのように達成できるかを説明します。
- エンジン ドロップダウン付きの独自の検索フォームを作成する
- ショートコード拡張機能をカスタマイズしてエンジン ドロップダウンを含める
- エンジン選択ドロップダウンを含めるようにデフォルトの検索フォームをカスタマイズする
独自の検索フォームを構築する
独自の検索フォームを構築するには、テーマファイルを編集して、含めたい入力フィールドとボタンを追加します。最も基本的なレベルでは、フォームを表示したいテーマテンプレートファイルに以下を追加できます。
| <!-- https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ --> | |
| <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>"> | |
| <label> | |
| <span class="screen-reader-text">Search for:</span> | |
| <input type="search" class="search-field" placeholder="Search..." value="<?php echo esc_attr( get_search_query() ); ?>" name="s" title="Search for:" /> | |
| </label> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| <input type="submit" class="search-submit" value="Search" /> | |
| </form> |
注意: デフォルトのエンジンには「Default」が出力されます。これは、スニペットの 14 行目を編集することでカスタマイズできます。
このフォームはデフォルトの WordPress 検索フォームのように構造化されていますが、定義済みのすべての SearchWP エンジンを含む select も含まれています。
フォームが設定されると、デフォルトの検索結果テンプレートにリダイレクトされますが、どのエンジンを使用するかを SearchWP に伝える必要もあります。
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |
このスニペットは、エンジン ドロップダウンから選択されたものを確認し、そのエンジン構成を検索に使用することのみを担当します。
SearchWPのショートコード拡張機能を使用する
SearchWPのショートコード拡張機能を使用すると、WordPressショートコードを使用して検索フォームを簡単に作成し、検索結果ページを制御できます。以下は、選択できるカテゴリドロップダウンを含む検索フォームの例です。
注意: ショートコードバージョン 1.2.1 以降が必要です
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| // ***** UNCOMMENT THIS IF YOU WANT TO USE SHORTCODES IN WIDGETS | |
| // add_filter( 'widget_text', 'do_shortcode' ); | |
| // Output a SearchWP Engines dropdown | |
| function my_searchwp_shortcodes_inject_engines() { ?> | |
| <p class="searchwp-shortcodes-engines"> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| </p><?php | |
| } | |
| add_action( 'searchwp_shortcodes_after_input', 'my_searchwp_shortcodes_inject_engines' ); |
これにより、SearchWP ショートコード フォームがカスタマイズされ、エンジン ドロップダウンも含まれるようになります。ただし、これではドロップダウンのみが処理されます。検索を実行する際にどのエンジンを使用するかを SearchWP に伝える必要があります。これは、(フォーム コードを追加したテーマのテンプレート ファイルではなく) SearchWP カスタマイズ プラグインに以下を追加することで実行できます。
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |
このスニペットは、検索リクエストを確認して、ドロップダウンからどのエンジンが選択されたかを確認し、現在の検索に使用します。
エンジンドロップダウンを含めるようにデフォルトの検索フォームを変更する
WordPress では、多くのテーマに含まれるデフォルトの検索フォームをフィルター処理できます。これは get_search_form() の呼び出しによって生成され、テーマ ディレクトリに searchform.php という名前のファイルを含めるか、get_search_form フィルターを介して完全にカスタマイズできます。この例では、get_search_form フィルターを使用します。
All hooks should be added to your custom SearchWP Customizations Plugin.
サイトのデフォルトの検索フォームにエンジンドロップダウンを含めるには、SearchWP カスタマイズ プラグインに以下を追加します。
| <?php | |
| // Adds a SearchWP Engines dropdown to the search form | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| function my_searchwp_get_search_form_with_engines_dropdown( $form ) { | |
| ob_start(); ?> | |
| <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>"> | |
| <label> | |
| <span class="screen-reader-text">Search For</span> | |
| <input type="search" class="search-field" placeholder="Search..." value="<?php echo esc_attr( get_search_query() ); ?>" name="s" title="Search for:" /> | |
| </label> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| <input type="submit" class="search-submit" value="Search" /> | |
| </form> | |
| <?php return ob_get_clean(); | |
| } | |
| add_filter( 'get_search_form', 'my_searchwp_get_search_form_with_engines_dropdown' ); |
ここで使用されているフォーム コードは、WordPress に付属するデフォルトの検索フォームに基づいています。テーマが以前にフォームをカスタマイズしていた可能性があり、単にドロップダウンを追加したい場合があります。フォーム コードをテーマに付属していたものと一致するように変更し、コード サンプルの 11 ~ 22 行目をエンジンドロップダウンを表示したい場所に簡単に追加できます。
このスニペットは検索フォームのみを変更します。ドロップダウンから値を取得し、SearchWPに選択されたエンジンを検索に使用するように指示する必要があります。これは、SearchWP Customizations プラグイン(フォームコードを追加したテーマのテンプレートファイルではありません)に以下を追加することで実現できます。
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |

