複数カスタムタクソノミー(ターム)で絞り込み検索をしたい
Wordpressのプラグイン「Custom Post Type UI」を使い、
カスタム投稿タイプ test を、そしてカスタムタクソノミーとして
area
employment
other
を作りました。
front-page.php には以下のような検索フォームを設置。
タームはそれぞれの value= の値を設定しています。
(例: カスタムタクソノミーareaのタームは、center east west south north)
php
1<form action="/test/" method="GET"> 2 <dl> 3 <dt>エリア</dt> 4 <dd> 5 <ul> 6 <li><input type="checkbox" name="form-area[]" value="center">中央区</li> 7 <li><input type="checkbox" name="form-area[]" value="east">東区</li> 8 <li><input type="checkbox" name="form-area[]" value="west">西区</li> 9 <li><input type="checkbox" name="form-area[]" value="south">南区</li> 10 <li><input type="checkbox" name="form-area[]" value="north">北区</li> 11 </ul> 12 </dd> 13 </dl> 14 <dl> 15 <dt>雇用形態</dt> 16 <dd> 17 <ul> 18 <li><input type="checkbox" name="form-employment[]" value="seiki">正規職員</li> 19 <li><input type="checkbox" name="form-employment[]" value="kikankeiyaku">期間契約職員</li> 20 <li><input type="checkbox" name="form-employment[]" value="part">パート</li> 21 </ul> 22 </dd> 23 </dl> 24 <dl> 25 <dt>その他</dt> 26 <dd> 27 <ul> 28 <li><input type="checkbox" name="form-other[]" value="sinsotu">新卒</li> 29 <li><input type="checkbox" name="form-other[]" value="musikaku">無資格OK</li> 30 <li><input type="checkbox" name="form-other[]" value="blank">ブランクありOK</li> 31 </ul> 32 </dd> 33 </dl> 34 <div> 35 <input type="submit" value="検索する"> 36 </div> 37</form>
これをGETで archive-test.php に送信し、受け取った値を元にアーカイブページに結果を表示したいのです。
以下がその archive-test.php です。
php
1<?php 2 //【エリア】チェックボックスにチェックが入っていたら~ 3 if(isset($_GET['form-area'])) { 4 $form_area = $_GET['form-area']; 5 $tax_query_area = array( 6 'taxonomy' => 'area', 7 'field' => 'slug', 8 'terms' => $form_area 9 ); 10 } 11 //【雇用形態】チェックボックスにチェックが入っていたら~ 12 if(isset($_GET['form-employment'])) { 13 $form_employment = $_GET['form-employment']; 14 $tax_query_employment = array( 15 'taxonomy' => 'employment', 16 'field' => 'slug', 17 'terms' => $form_employment 18 ); 19 } 20 //【その他】チェックボックスにチェックが入っていたら~ 21 if(isset($_GET['form-other'])) { 22 $form_other = $_GET['form-other']; 23 $tax_query_other = array( 24 'taxonomy' => 'other', 25 'field' => 'slug', 26 'terms' => $form_other 27 ); 28 } 29 30 //検索条件を指定する 31 $args = array ( 32 'post_status' => 'publish', 33 'post_type' => 'test', 34 'tax_query' => array ( 35 'relation' => 'AND', 36 $tax_query_area, //ここの記述が怪しい1 37 $tax_query_employment, //ここの記述が怪しい2 38 $tax_query_other, //ここの記述が怪しい3 39 ) 40 ); 41?> 42 43<?php $the_query = new WP_Query($args); ?> 44 <?php if($the_query->have_posts()): ?> 45 <?php while($the_query->have_posts()): $the_query->the_post(); ?> 46 <p> 47 <?php the_title(); ?> 48 </p> 49 </div> 50 <?php endwhile; ?> 51 <?php endif; ?> 52<?php wp_reset_query(); ?>
しかし、この記述だと該当の結果が「無し」になってしまうようで、検索結果に何も表示されないのです……。
試したこと
試しに //ここの記述が怪しい1 を残して、2~3を削除すると条件に該当した記事が表示されました。
同様に //ここの記述が怪しい2 のみや 3のみでやっても、条件に該当した記事が表示されます。
しかし、複数同時に 1~3 を記述すると結果が無しになってしまうのです。
また、
php
1 var_dump($tax_query_area); 2 var_dump($tax_query_employment); 3 var_dump($tax_query_other); 4 var_dump($args);
としてみた感じでは、値はちゃんと入っているようでした。
思っていること
これは恐らく、
php
1 'tax_query' => array ( 2 'relation' => 'AND', 3 $tax_query_area, //ここの記述が怪しい1 4 $tax_query_employment, //ここの記述が怪しい2 5 $tax_query_other, //ここの記述が怪しい3 6 )
ここの書き方が間違っているんだろうな、と思っています。
しかしいくらGoogleで検索をかけても、どうにもこんな感じで記述されているようにしか思えず……。
どなたかアドバイスをいただければ幸いです。
補足
現在、archive-test.php に記述しているやり方では、front-page.php からの検索フォームに
form-area
form-employment
form-other
の3つ全てにチェックが入っていなかった場合、チェックされていないものに null が入ってしまってどのみち正しく検索できないのではと思っています。
これを防ぐために、チェックが入っていた場合のみに以下の箇所に form-area や form-employment 等が追加されていく方法にしたいのですが、これも考えるもののやはりわからず……。
php
1 'tax_query' => array ( 2 'relation' => 'AND', 3 $tax_query //←複数項目にわたってチェックされてる場合、ここが自動的に増えていくようにしたい 4 )
こうすると自動的にできるよ、というヒント的なものでもいただければ嬉しいです。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。