複合検索のプラグインにはいろいろとありますが、無料で、わかりやすくて良いものというのが意外と無いんですよね。

かなり凝った複合検索であれば、多少の出費は目を瞑らなければならないのかもしれませんが「カテゴリーとキーワード」のみの複合検索であれば、プラグインなしでも簡単にいけちゃいます。

  1. 検索フォーム用のファイルを用意(コピペでOK)
  2. function.phpにショートコード読み込み用ソースを追加(コピペでOK)
  3. カスタムHTMLウィジェットにショートコードを書き込む(1行のみ)

具体的にはこんな感じです。

検索フォーム用のファイル

<form method="get" action="<?php bloginfo('url'); ?>">
  <?php wp_dropdown_categories('show_option_none=カテゴリを選択'); ?>
  <input name="s" id="s" type="text" placeholder="キーワードを入力">
  <input id="submit" type="submit" value="検索">
  <input id="reset" type="reset" value="リセット">
</form>

上記のコードをそのままウィジェットに書き込めれば良いのですが、カテゴリーリストの表示部分がphpになっているためカスタムHTMLウィジェットには書き込めません。

ウィジェットでphpを扱えるようにするプラグインもあるにはあるのですが、安全性と速度を考えると、あまりおすすめできるものではありません。

そこで、上記ソースをファイルとして用意しておき、それをカスタムHTMLウィジェットでショートコードとして呼び出せるようにするため、function.phpに以下を追加します。

function.phpへの追加

この場合、ショートコードを[searchform]、読み込むファイル(上記)をsearchform.phpとしています。

add_filter( 'widget_text', function( $ret ) {
	$php_file = 'searchform';
	if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
		add_shortcode( $php_file, function() use ( $php_file ) {
			get_template_part( $php_file );
		});
		ob_start();
		do_shortcode( '[' . $php_file . ']' );
		$ret = ob_get_clean();
	}
	return $ret;
}, 99 );

カスタムHTMLウィジェットにショートコードを書き込む

ショートコードは、カスタムHTMLウィジェットに[searchform]と書き込むだけです。

 

すると、このように表示されます。