
WordPressを利用した一般的なブログではまず必要ないですが、カテゴリーによってコンテンツが大幅に異なる構成の場合、カテゴリーごとに(限定して)記事の検索をしたいと思うことがあります。
このサイトでも、突拍子もない自己満足のカテゴリを設けているので、検索件数の表示など、 search.php のミニカスタマイズも併せてメモ。
検索フォーム
フォームに wp_dropdown_categories(); の一行を追加すると、カテゴリー限定検索に必要なドロップダウンメニューが表示されます。
<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を記入。
<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")も可能です。
<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>
検索キーワード及び件数の表示
色々なサイトで解説されているのですが、必ずしも同じ記述ではなく、コードも微妙に違うようです。今のところ最も簡素ではないか?と思うものを採用。
※ the_search_query() で検索が行われた時のキーワードを表示しますが、WordPress Codexには、 “このファンクションは HTML 属性の中で使うと安全です” と記載されています。
検索数を表示する $wp_query->found_posts 部分は、
echo $allsearch->post_count;
とする解説が多いように感じますが(その方が良い?)、こちらもシンプルに。
素人のカスタマイズメモです。誤った認識やコードが含まれている場合があります。
