検索フォームを設置する
記事本文/テキストウィジェットにショートコードを挿入
ショートコードで記事本文やテキストウィジェットに検索フォームを設置できます。
(例:フォームID=2の検索フォームを表示する場合)
[feas-search-form id=2]
検索フォームを複数作成している場合、id属性にフォームIDを与えることで表示する検索フォームを指定できます。id属性を省略した場合はフォームID=0の検索フォームが表示されます。
「〇〇の検索結果●●件」といったような検索条件に該当する件数を表示する際に●●の数字を取得/表示するにはには下記のように記述します。前後の語句は手入力で補ってください。
(例:フォームID=2の該当件数を表示する場合)
[feas-search-count id=2]
検索フォーム同様、id属性を指定できます。
検索結果ページで、指定された検索条件をページタイトルなどに表示する際、語句の一覧を取得するには下記のように記述します。
[feas-search-query]
このショートコードには3つの属性をオプションとして渡すことができます。
- sep 複数の検索条件が指定された場合に、それぞれの語句の区切り文字(デフォルトは半角カンマ「,」)
- before それぞれの語句の前に挿入される文字(デフォルトは<span>)
- after それぞれの語句の後に挿入される文字(デフォルトは</span>)
(例:半角スペース区切り、各キーワードをspanタグで囲いkeywordというclassを付与)
[feas-search-query sep=' ' before='<span class="keyword">' after='</span>']
テンプレートにPHPの関数で設置する方法
ショートコードの他に、FEAS独自のPHP関数をテーマのテンプレートに設置することでも検索フォームを表示できます。テーマにPHP関数を直接設置する方法でしたらテーマの機能に制限されず、サイト内のどこにでも検索フォームを設置できます。
検索フォームを表示
検索フォームを表示したいテンプレートの任意の場所に下記のように記述します。
(例:フォームID=2の検索フォームを表示する場合)
<?php feas_search_form( 2 ); ?>
検索フォームを複数作成した場合、引数にフォームIDを与えることで表示する検索フォームを指定できます。引数を省略した場合はフォームID=0の検索フォームが表示されます。
記事ループの中に設置すると、記事の数分だけ検索フォームが表示されてしまいますのでご注意ください。記事ループの外部に設置してください。
検索条件を検索結果一覧ページに表示
検索結果ページで、指定された検索条件をページタイトルなどに表示する際、語句の一覧を取得するには下記のように記述します。
<?php feas_search_query(); ?>
ショートコードと同様に、引数を与えることでオプションを指定できます。
- output 画面出力(デフォルトはtrue)
- falseにすると画面出力せずに各キーワードを配列で取得できます。その後PHPでループ処理して加工できます。
- 内部的には
search_result_array()
関数に渡されます。
- separator 検索条件の区切り文字(デフォルトは半角カンマ「,」)
- before それぞれの語句の前に挿入される文字(デフォルトは<span>)
- after それぞれの語句の後に挿入される文字(デフォルトは</span>)
該当件数を表示
検索条件に該当する件数を表示するには下記のように記述します。
(例:フォームID=2の該当件数を表示する場合)
<?php feas_search_count( 2 ); ?>
2つ目の引数にfalseを指定すると、画面出力せずに値をreturnし、その後PHPで処理できます。
記述例
上記の関数を用いた記述例は以下のとおりです。
front-page.phpなど検索フォームを表示するテンプレートに設置
<?php if ( function_exists( 'feas_search_form' ) ) { ?> <div class="feas-search-form"> <?php feas_search_form(); ?> </div> <?php } ?> <div class="feas-search-count"> 現在の登録件数:<?php feas_search_count(); ?> 件 </div>
search.phpなど検索結果を表示するテンプレートの上部に設置
<h2>「<?php feas_search_query(); ?>」の検索結果 <?php feas_search_count(); ?> 件</h2>
検索結果を表示する
検索条件にヒットした記事一覧を正しく表示させるためには、使用するテーマフォルダ内に search.php というテンプレートが存在している必要があります。大抵の既存テーマには含まれていますが、もし含まれていない場合は archive.php などの記事一覧表示用のテンプレートを複製して search.php に名称変更しカスタマイズしてご使用ください。そのsearch.php内の記事を表示するループ部分(if(have_posts()から始まりendifで終わるセクション)で、検索にヒットした記事が表示されます。
WordPressは検索が実行され is_search が true になると、まずテーマ内の search.php というテンプレートを探して検索結果を表示しようとします。FEASのどの検索フォームから検索が実行された場合でも検索結果は search.php を通ります。もし search.php が存在しない場合は、下記の優先順位で別のテンプレートがフォールバックとして使用されます(WordPressのテンプレート階層のルール)。
search.php > index.php
index.php はすべてのテンプレートの最後の受け皿となるため、このテンプレートを検索用にカスタマイズすることは表示に不具合がでる可能性がありますのでおすすめしません。
検索結果のテンプレートを検索フォームごとに切り替える
サイト内のそれぞれのカテゴリ/コーナー毎に別々の検索フォームを設置した場合、検索結果を表示するテンプレートも分けたい場合があります。その場合は search.php を必要なパターン分だけ複製・名称変更し、さらに複製元の search.php の中身を下記のように書き換えて分岐専用のテンプレートにします。
<?php // フォームID=0から検索された場合 if ( '0' === $_GET['fe_form_no'] ) { //search-form0.phpを読み込む get_template_part( 'search', 'form0' ); } // フォームID=1から検索された場合 elseif ( '1' === $_GET['fe_form_no'] ) { //search-form1.phpを読み込む get_template_part( 'search', 'form1' ); } // それ以外(WordPress標準の検索窓など) else { //archive.phpを読み込む get_template_part( 'archive' ); } ?>
検索を実行すると必ずこの search.php を通りますが、その際にどの検索フォームから検索が実行されたかはURLに含まれる fe_form_no というパラメータで判別できるため、この値を使ってsearch.phpの先で読み込むテンプレートを条件分岐できます。
複製したそれぞれの searh.php のコピーを検索フォームごとに表示内容やデザインをカスタマイズし、上記の条件分岐のget_template_partに指定してください。
コード記述例の search-form0.php というファイル名は例であり、とくにルールはありませんので自由に変えて下さい。