WordPressのブログ内検索は通常「キーワード検索」のみですが、カスタム投稿タイプとカスタムタクソノミーのプルダウンメニューを用意して、キーワードと合わせて絞り込み検索する方法を紹介致します。
カスタム投稿とカスタムタクソノミーの絞り込み検索フォーム
参考サイトを元にまとめましたので、まずはざっとソースコードから。
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 39 40 41 42 43 44 45 46 47 48 49 50 |
<form method="get" action="<?php echo esc_url(home_url('/'));?>"> <input type="text" name="s" id="s" value="<?php echo get_search_query(); ?>" placeholder="キーワード"> <?php //カスタム投稿タイプの一覧を取得 $args = array( 'public' => true, '_builtin' => false ); $post_types = get_post_types( $args ); ?> <?php if(count($post_types) != 0):?> <select name="post_type"> <?php foreach ( $post_types as $post_type ) : ?> <option value="<?php echo $post_type; ?>"><?php echo esc_html( get_post_type_object( $post_type )->label ); ?></option> <?php endforeach;?> </select> <?php endif; ?> <?php //カスタムタクソノミー1を取得 $selected = get_query_var("タクソノミースラッグ1",0); $args = array( 'show_option_all' => 'カテゴリ1を選択', 'taxonomy' => 'タクソノミースラッグ1', 'name' => 'タクソノミースラッグ1', 'value_field' => 'slug', 'hide_empty' => 1, 'selected' => $selected ); wp_dropdown_categories($args); ?> <?php //別のカスタムタクソノミー2を取得 $selected = get_query_var("タクソノミースラッグ2",0); $args = array( 'show_option_all' => 'カテゴリ2を選択', 'taxonomy' => 'タクソノミースラッグ2', 'name' => 'タクソノミースラッグ2', 'value_field' => 'slug', 'hide_empty' => 1, 'selected' => $selected ); wp_dropdown_categories($args); ?> <input type="submit" value="検索"> </form> |
①テキスト(キーワード)検索
これはWordPressのテキスト検索をそのまま使います。
1 |
<input type="text" name="s" id="s" value="<?php echo get_search_query(); ?>" placeholder="キーワード"> |
②カスタム投稿タイプのプルダウンメニュー
WordPressに登録されているカスタム投稿タイプを取得するにはget_post_typesを使います。通常、get_post_typesはpostやpage、attachmentを含めた全ての投稿タイプを取得しますが、引数‘_builtin’=>falseにすることで「カスタム投稿タイプのみ」取得することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php //カスタム投稿タイプの一覧を取得 $args = array( 'public' => true, '_builtin' => false ); $post_types = get_post_types( $args ); ?> <?php if(count($post_types) != 0):?> <select name="post_type"> <?php foreach ( $post_types as $post_type ) : ?> <option value="<?php echo $post_type; ?>"><?php echo esc_html( get_post_type_object( $post_type )->label ); ?></option> <?php endforeach;?> </select> <?php endif; ?></strong> |
なお、検索対象のカスタム投稿タイプが2〜3個しかないとか、投稿タイプが固定のため今後増えることがない、などの条件の場合は、以下のようにプルダウンメニュー部分をベタ書きしても良いかもしれません。
1 2 3 4 5 6 |
<strong><select name="post_type"> <option value="カスタム投稿タイプのスラッグ1">カスタム投稿タイプ名1</option> <option value="カスタム投稿タイプのスラッグ2">カスタム投稿タイプ名2</option> <option value="カスタム投稿タイプのスラッグ3">カスタム投稿タイプ名3</option> <option value="カスタム投稿タイプのスラッグ4">カスタム投稿タイプ名4</option> </select> |
参考情報
https://webcake.stars.ne.jp/webdesign/wordpress-get-post-types.html
③カスタムタクソノミーのプルダウンメニュー(複数)
最後に、wp_dropdown_categoriesを使ってドロップダウンメニューのカテゴリーリストを追加します。ポイントは、タクソノミースラッグを指定する以下の3点です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php //カスタムタクソノミー1を取得 $selected = get_query_var("タクソノミースラッグ1",0); $args = array( 'show_option_all' => 'カテゴリ1を選択', 'taxonomy' => 'タクソノミースラッグ1', 'name' => 'タクソノミースラッグ1', 'value_field' => 'slug', 'hide_empty' => 1, 'selected' => $selected ); wp_dropdown_categories($args); ?> |
selectedで初期選択値とするカテゴリーを指定することができますので、カスタムタクソノミーのスラッグを指定します。
次に、6行目のtaxonomyの引数にも同じタクソノミーのスラッグを指定します。
最後に、7行目のnameはドロップダウンメニュー(selectタグ)のname属性に当たりますので、これも同じタクソノミーのスラッグにします。
参考情報
http://onocom.net/blog/wordpress%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%EF%BC%81%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%BF%E3%82%AF%E3%82%BD/
コメント