###前提・実現したいこと
wordpressを用いてサイトを構築しています。
カスタム投稿(room)のアーカイブページ(archive-room.php)で、カスタムタクソノミーによるチェックボックスでの絞り込み検索を考えています。
ワードプレスのtax_queryのoperatorは、初期値が'IN'になっていますが、これをANDにした検索をしたいと思っています。
ANDにする方法として、下記のようなことも考えたのですが、他に方法があるはずだと質問した次第です。
また、自分が今回のことを解決するために様々試す仮定で、さらに疑問に思ったことも追記します。
<さらなる疑問>
pre_get_postsにおける引数$queryと、global変数である$wp_quryとの違いとは。
###発生している問題・エラーメッセージ
(print_r( $wp_query ))での結果↓ WP_Query Object ( [query] => Array ( [post_type] => room [characteristics] => Array ( [0] => 24h [1] => 5minutes ) ~~ [query_vars] => Array ( [post_type] => room [characteristics] => Array ( [0] => 24h [1] => 5minutes ) ~~ [tax_query] => WP_Tax_Query Object ( [queries] => Array ( [0] => Array ( [taxonomy] => characteristics [terms] => Array ( [0] => 24h [1] => 5minutes ) [field] => slug [operator] => IN [include_children] => 1 )
###該当のソースコード
$taxonomy_checkboxには、characteristicsが入っており、これはCPTUIにより、24hと5minutesというタームが登録されています。かつ、これらは設定の段階でクエリ変数に登録されるようになっています。 ----------(searchform.php)---------------------- <form class= "" method="get" action="" > foreach($taxonomy_checkbox as $taxonomy): $terms = get_terms($taxonomy, 'hide_empty=0'); if(!is_wp_error($terms) && count($terms)): foreach($terms as $term): ?> <label><input type="checkbox" name="<?php echo $taxonomy."[]" ?>" value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></label><br> <?php endforeach; endif; endforeach; ?> <input type="submit" value="検索" /> </form> ------------(archive-room.phpでの$wp_query出力)------------------- <pre> <?php print_r( $wp_query ); ?> /pre>
###試したこと
- pre_get_postsを用いて、$tax_queryを変更する
$tax_query = array(array(
'taxonomy'=>$taxonomy,
'terms'=> $_GET[$taxonomy],
'include_children'=>false,
'field'=>'slug',
'operator'=>'AND'
));
$query -> set("tax_query",$tax_quer);
→pre_get_postsによるtax_queryも登録されるが、operator→INのクエリがなくなるわけではない。
2.formのnameを変更して、クエリに自動的に登録されないようにしたのち、pre_get_postsを用いてクエリに追加。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
あなたの回答
tips
プレビュー