WordPress サイト内検索機能を付ける

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

コメントを残す