WordPressを利用した一般的なブログではまず必要ないですが、カテゴリーによってコンテンツが大幅に異なる構成の場合、カテゴリーごとに(限定して)記事の検索をしたいと思うことがあります。

このサイトでも、突拍子もない自己満足のカテゴリを設けているので、検索件数の表示など、 search.php のミニカスタマイズも併せてメモ。

検索フォーム

フォームに wp_dropdown_categories(); の一行を追加すると、カテゴリー限定検索に必要なドロップダウンメニューが表示されます。

<form method="get" action="/">
<fieldset>
<legend>検索</legend>
<?php wp_dropdown_categories('引数'); ?>
<input type="text" id="s" name="s" value="" />
<input type="submit" id="searchsubmit" value="検索" />
</fieldset>
</form>

一部のカテゴリーを除外したり(exclude)、階層形式に表示(hierarchical)するなど、様々な引数が用意されています。 WordPress Codex 日本語版

このサイトでは、 wp_dropdown_categories('show_option_all='.__('全体から').'&hierarchical=1'); としています。

応用

例えば、カテゴリID3に限定して「wordpress」を検索した結果のURLは、 /?s=wordpress&cat=3 となるので、ラジオボタン形式のフォームにしたり、 input type="hidden" を利用して、「初めから特定のカテゴリを除外したフォームに」という事にも応用できます。

radio ボタンの場合 全ての radio に name="cat" が必須、value にカテゴリIDを記入。

<form method="get" action="/">
<fieldset>
<legend>検索</legend>
<div>
  <input type="radio" value="0" name="cat" id="all" checked="checked" />
  <label for="all">全体</label>
  <input type="radio" value="1" name="cat" id="cat1" />
  <label for="cat1">カテ1</label>
  <input type="radio" value="3" name="cat" id="cat3" />
  <label for="cat3">カテ3</label>
  <input type="radio" value="4" name="cat" id="cat4" />
  <label for="cat4">カテ4</label>
</div>
<div>
<input type="text" id="s" name="s" value="" />
<input type="submit" id="searchsubmit" value="検索" />
</div>
</fieldset>
</form>

input type="hidden" の場合 name="cat" 必須、value にカテゴリIDを記入。

カテゴリーIDの前にマイナスをつけた除外(value="-3")や、カンマで区切った複数カテゴリの指定(value="1,3")も可能です。

<form method="get" action="/">
<div>
<input type="text" id="s" name="s" value="" />
<input type="submit" id="searchsubmit" value="検索" />
<input type="hidden" name="cat" value="-1,-3" />
</div>
</form>

検索キーワード及び件数の表示

色々なサイトで解説されているのですが、必ずしも同じ記述ではなく、コードも微妙に違うようです。今のところ最も簡素ではないか?と思うものを採用。

<?php the_search_query(); ?> の検索結果<?php echo $wp_query->found_posts; ?>

the_search_query() で検索が行われた時のキーワードを表示しますが、WordPress Codexには、 “このファンクションは HTML 属性の中で使うと安全です” と記載されています。

検索数を表示する $wp_query->found_posts 部分は、

$allsearch = & new WP_Query(”s=$s&showposts=-1″);
echo $allsearch->post_count;

とする解説が多いように感じますが(その方が良い?)、こちらもシンプルに。

素人のカスタマイズメモです。誤った認識やコードが含まれている場合があります。