質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

0回答

3237閲覧

wordpressにおけるカスタムタクソノミー絞り込み検索で、'operator'=>'AND'にする方法。

sugadai

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/07/20 04:15

###前提・実現したいこと
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>

###試したこと

  1. 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/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問