よろしくお願いいたします。
現在、WPでこのような仕組みを作っています。
まずACFの情報をもとに作った絞り込み検索フォームを入力、送信
↓
検索結果ページに渡したフィールドの値でWP_Queryの条件を作成
↓
AND形式(〇〇かつ〇〇)で引っかかったポストを表示
そして問題の箇所が検索結果ページで、
絞り込みフォームの情報は渡せているのですが、WP_Queryで上手く条件通りの表示ができません。
具体的には、AND形式(〇〇かつ〇〇)という条件な上で、どんな絞り込み検索のパターンを試しても表示されずでして、、、
たぶん配列の作り方が間違えているとは思うんですが、知識が追いつかずで、、
以下コードです。
▼絞り込み検索フォーム
それぞれ記事のACFの情報と紐付ける前提ですが、こちらのフォームは直書きで書いています(ACFの情報をループ外で取得する方法が分からなかったので)
<form class="Searchform_form" method="get" id="searchform" action="<?php bloginfo('url'); ?>"> <label for="s" class="assistive-text">検索</label> <input type="hidden" type="text" name="s" id="s" placeholder="検索" /> <div class="Searchform_form_wrap"> <div class="Searchform_form_item user"> <div class="Searchform_form_item_title">ユーザータイプ</div> <div class="Searchform_form_item_labels"> <label><input type="checkbox" name="user[]" value="メンズ">メンズ</label> <label><input type="checkbox" name="user[]" value="レディース">レディース</label> <label><input type="checkbox" name="user[]" value="ジュニア">ジュニア</label> </div> </div> <div class="Searchform_form_item size"> <div class="Searchform_form_item_title">顔幅サイズ</div> <div class="Searchform_form_item_labels"> <label><input type="checkbox" name="size[]" value="SS">SS</label> <label><input type="checkbox" name="size[]" value="S">S</label> <label><input type="checkbox" name="size[]" value="M">M</label> <label><input type="checkbox" name="size[]" value="L">L</label> <label><input type="checkbox" name="size[]" value="LL">LL</label> </div> </div> <div class="Searchform_form_item genre"> <div class="Searchform_form_item_title">製品種別</div> <div class="Searchform_form_item_labels"> <label><input type="checkbox" name="genre[]" value="めがね">めがね</label> <label><input type="checkbox" name="genre[]" value="サングラス">サングラス</label> </div> </div> </div> <div class="Searchform_submit"> <span class="link"><input type="submit" value="全て見る"></span> </div> </form>
▼検索結果ページ
php
1 2<main class="Search"> 3 4 <?php 5 //フォームから値を取得 6 $s = $_GET['s']; 7 $user = $_GET['user']; 8 $size = $_GET['size']; 9 $genre = $_GET['genre']; 10 11 //配列を作成 12 $searchkeys = [ 13 'user' => [ 14 'key'=>'user', 15 'val' => $user 16 ], 17 'size' => [ 18 'key'=>'size', 19 'val' => $size 20 ], 21 'genre' => [ 22 'key'=>'genre', 23 'val' => $genre 24 ] 25 ]; 26 27 //後にあるWP_Queryのmeta_queryにて、この多次元配列を追加 28 foreach($searchkeys as $searchkey){ 29 if($searchkey){ 30 $metaquerysp[] = array( 31 'key'=>$searchkey['key'], 32 'value'=>$searchkey['val'] 33 ); 34 } 35 } 36 37 //meta_query用 38 $metaquerysp['relation'] = 'AND'; 39 ?> 40 41 <div>検索結果</div> 42 43 <?php 44 //WP_Query作成 45 $args = array( 46 'post_type' => 'product', 47 //この$metaqueryspが上手く機能してないっぽい 48 'meta_query' => $metaquerysp, 49 's' => $s 50 ); 51 //試しにprint_rで配列を見てみると以下が表示された 52 //Array ( [0] => Array ( [key] => user [value] => Array ( [0] => レディース ) ) [1] => Array ( [key] => size [value] => ) [2] => Array ( [key] => genre [value] => ) [relation] => OR ) 53 print_r($metaquerysp); 54 55 $search_post = new WP_Query($args); 56 if($search_post->have_posts()): while($search_post->have_posts()): $search_post->the_post(); 57 ?> 58 59 <li class="Top_featured_list_item"> 60 <!--ここに記事の情報を表示--> 61 </li> 62 63 <?php endwhile; else : ?> 64 65 <div>該当なし</div> 66 67 <?php endif; 68 wp_reset_query(); ?> 69 70</main>
以上がコードになります。
試行錯誤しているのですが、原因に気付けずで、、
どうかお力添え頂けると幸いです。
よろしくお願いします。
追記です。
$argsのmeta_queryを以下のように手動で設定したら、上手く吐き出されました。
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'OR',
array(
'key' => 'user',
'value' => "メンズ"
),
array(
'key' => 'size',
'value' => "SS"
),
)
),
しかしOR検索にしたので、〇〇か〇〇どっちかの値があれば表示される感じで、ここのAND検索にするとやっぱり表示されません。
さらに追記で、
AND検索で、どうやら「ユーザータイプ」にチェック入れて送信すると、どういうパターンでも何も表示されなくなりますね、、、、、「顔はばサイズ」「製品種別」にチェック入れて送信すると、ANDでも機能するみたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 03:20
2020/06/17 04:38
2020/06/17 04:45