WordPressのサイト内検索の実装はいたって簡単です。
検索用のプラグインもいくつか出ていますが、それらを使うまでもありません。
逆に、無駄にjavascriptとかを使っているプラグインを入れると、コンフリクトして不具合を起こす可能性もありますし。
仕組み
GETでパラメーター「s」に値を渡すだけです。
hijiriworld.com/web/?s=検索文字列
実装
<form method="get" action="<?php bloginfo('url'); ?>/"> <input type="text" name="s" value="<?php echo $_GET['s']; ?>" /> </form>
ボタンが欲しい場合は、
<form method="get" action="<?php bloginfo('url'); ?>/"> <input type="text" name="s" value="<?php echo $_GET['s']; ?>" /> <input type="submit" value="検索"> </form>
以上です。
スペース区切りで絞込み検索も可能です。
検索結果のテンプレート
テンプレート階層 によると、検索結果のテンプレートは、 search.php → index.php という流れになっています。
検索結果専用のテンプレートを作りたい場合は、テーマフォルダ内に、search.php として用意します。
search.php がない場合は、index.php が適用されます。
検索範囲を限定
ディフォルトの検索範囲は、投稿記事だけでなく、固定ページ、カスタム投稿タイプと、すべてが含まれてしまいます。
検索範囲を限定したい場合は、検索結果を限定表示することで実現します。
検索結果に投稿記事だけ表示する
検索結果のテンプレートの、ループの手前に以下コードを記述。
<?php query_posts("post_type=post"); ?>
検索結果に固定ページだけ表示する
<?php query_posts("post_type=page"); ?>
あとは応用でいかようにでも。
→ テンプレートタグ/query posts – WordPress Codex 日本語版
おまけ
一応、検索フォームを表示する関数も用意されています。
<?php get_search_form(); ?>
→ 関数リファレンス/get_search_form – WordPress Codex 日本語版
表示する検索フォームは、テーマフォルダ内に searchform.php として用意します。
searchform.php がない場合は、ビルトインの検索フォームが表示されます。
個人的には、わざわざテンプレートファイルを増やす必要はあまりないかなと思います。
Comments
[…] http://hijiriworld.com/web/wordpress-search/ […]
[…] WordPress サイト内検索機能を付ける […]