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

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

ただいまの
回答率

89.97%

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

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,055

sugadai

score 9

前提・実現したいこと

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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる