WordPressの検索フォームを設置するためには、決まり事があります。今までは独自に検索フォームを作ってWP_Queryに組み込む方法をしていたのですが、勉強も含めて通常のループで表示できる検索フォームをまとめてみようと思います。
余談ですが、キーワードは1600文字以内と制限されているみたいですね。「Fairly insane upper bound for search string lengths.」と書いてあるように、非常識な文字数ではあります。
検索フォームの設置
まずは検索フォームの設置になります。テンプレートにする場合は、「searchform.php」として保存します。ヘッダーなどのテンプレートにformを書き込んでも動作します。
逆に、Wordpressの検索を動作させるためには以下のような決まり事があります。
- 検索キーワードとなるinputの「name」は「s」にする( <input type="text" name="s" /> )
- フォームはホームにgetで飛ばす( <form method="get" action="<?php echo home_url( '/' ); ?>"> )
- labelをつける
しかし、3)をしなくても動作しているため、必要性が分かりません。環境によっては動かなくなるのでしょうか。
分かりませんが、基本的な検索フォームは以下のようになるかと思います。
1 2 3 4 5 |
<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>"> <label for="s">キーワード</label> <input type="text" value="" name="s" id="s" /> <input type="submit" value="検索" /> </form> |
カテゴリーを制限する
検索をかけるカテゴリーを制限したいときもあるかと思います。例えば、WelCartを利用していて商品カテゴリーのみ検索をかけたいときなどです。
- 特定のカテゴリー
- 特定のカテゴリーのみを検索結果に表示する場合です。「value」にはカテゴリーIDを入れます。
1<input type="hidden" value="1" name="cat" /> - 複数のカテゴリー
-
カテゴリのIDをコンマで区切ることで複数の指定をすることが出来ました。
チェックボックスにしたいと思い、nameを「cat[]」にして配列を果たすとWarningが出てしまいました。やはりチェックボックスにしたい場合は、jQueryで動作させるか、検索結果の際にWP_Queryを使うなどの工夫が必要なのかもしれません。
1<input type="hidden" value="1,10" name="cat" />
検索結果の表示
検索フォームの結果は「search.php」が適用されます。もしない場合は「index.php」になります。
コメントを残す