カスタム投稿内、かつカスタムタクソノミーをセレクトボックスで検索したいときに地味に悩んだので書き残しておきます。
見た目のイメージとしては下の画像のような感じです。and検索です。
searchform.phpにフォームを作る
とりあえずsearchform.phpのような別ファイルを作成してフォームの記述をしていきます。この作成したテンプレートを呼び出すには
1 |
<?php get_search_form(); ?> |
または
1 |
<?php get_template_part('searchform'); ?> |
などの記述を該当テンプレートで行いましょう。
searchform.phpに記述していく
作成したsearchform.phpテンプレートには以下のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<form method="get" action="<?php echo esc_url(home_url('/'));?>"> <input type="hidden" name="s"><!--//nameをsにしておかないと動作しないので気を付ける--> <input type="hidden" name="post_type" value="□□□"><!--//□□□には検索するカスタム投稿名を入れる。nameはこのまま--> <div class="wrap"> <label> <?php //タクソノミー1 $selected = get_query_var( "〇〇〇", 0 );//〇〇〇にはタクソノミー1のスラッグを指定 $args = array( 'show_option_all' => '選択してください',//一番最初に表示されているテキストを入力 'taxonomy' => '〇〇〇',// 〇〇にはタクソノミー1のスラッグを指定 'name' => '〇〇〇',//〇〇〇にはタクソノミー1のスラッグを指定 'value_field' => 'slug', 'hide_empty' => 1, 'selected' => $selected ); wp_dropdown_categories( $args ); ?> </label> <label> <?php //タクソノミー2 $selected = get_query_var( "〇〇〇", 0 );//〇〇〇にはタクソノミー2のスラッグを指定 $args = array( 'show_option_all' => '選択してください',//一番最初に表示されているテキストを入力 'taxonomy' => '〇〇〇',// 〇〇にはタクソノミー2のスラッグを指定 'name' => '〇〇〇',//〇〇〇にはタクソノミー2のスラッグを指定 'value_field' => 'slug', 'hide_empty' => 1, 'selected' => $selected ); wp_dropdown_categories( $args ); ?> </label> <button type="submit"><span>絞り込み検索</span></button> </div> <!--//wrap--> </form> |
だいたい注釈で残している通りなのですが、一応少しご説明します。
1 2 |
<input type="hidden" name="s"><!--//nameをsにしておかないと動作しないので気を付ける--> <input type="hidden" name="post_type" value="□□□"><!--//□□□には検索するカスタム投稿名を入れる。nameはこのまま--> |
とりあえずWordpressの検索の基本のinputにname=”s”を指定したものを置いておきます。
これのおかげで検索実行時に表示されるページのテンプレートファイルがsearch.php(検索結果ページ)になります。
テキスト検索があればそこに入れておけばいいのですが、今回はselectだけなのでhiddenで隠しておきます。
次の項目もhiddenしておきつつ、valueにはカスタム投稿名を入力します。
あとはタクソノミー部分の設定です。
1 |
$selected = get_query_var( "〇〇〇", 0 ); //〇〇〇にはタクソノミー1のスラッグを指定 |
とりあえず書いてある通り、タクソノミーのスラッグを入力してください。
1 |
'show_option_all' => '選択してください', |
ここは一番最初のよくある『選択してください』のテキストになります。
必要なければ取ってしまってもいいのですが、全件表示が必要であればそのままにしておいた方が無難です。
1 2 |
'taxonomy' => '〇〇〇', // 〇〇にはタクソノミー1のスラッグを指定 'name' => '〇〇〇', //〇〇〇にはタクソノミー1のスラッグを指定 |
ここも書いてある通り最初のものと同じタクソノミーのスラッグを入力します。
これでタクソノミー部分の設定は完了です。
あとは同じものを複製してタクソノミーのスラッグを変えておいていくと勝手にandでの検索をしてくれます。
あとはうまくいっていれば作成した検索結果に飛べるかと思います。