前提・実現したいこと
WordPressで、プラグインなしで絞り込み検索を実装したいと思っています。
発生している問題・エラーメッセージ
「customer」という投稿タイプの中で、選択したカスタムフィールドの値で絞り込み検索をしたいのですが、うまく投稿が表示されません。
現在の状態としては、
①functions.phpで、pre_get_postsを使ってメインクエリにカスタムフィールドの値を追加
②searchform.phpで検索フォームを作成
③archive-customer.phpに検索フォームとメインループを設置
というところまできています。
var_damp()で検索クエリ?を確認しましたが、値は正しく入っているような気がします。
カスタムフィールドは、ACFを使用しています。
検索対象のフィールドは、以下の箇所となります。
該当のソースコード
該当のソースコードを記載します。
【functions.php】
php
1function change_pre_get_posts($query) { 2 3 // 管理画面,メインクエリ以外に干渉しないため 4 if ( is_admin() || ! $query->is_main_query() ){ 5 return; 6 } 7 8 // カスタム投稿タイプが「customer」 9 if($query->is_post_type_archive( 'customer' )) { 10 11 $meta_query = [ 12 'relation' => 'AND', 13 ]; 14 15 // radioボタンの方 16 if(!empty($_GET['prefecture'])) { 17 $meta_query[] = array( 18 'key' => 'school', 19 'value' => $_GET['prefecture'], 20 'compare' => '=' 21 ); 22 } 23 24 // セレクトボックスの方 25 if(!empty($_GET['class']) and is_array($_GET['class'])) { 26 $sub_meta_query = [ 27 'relation' => 'OR', 28 ]; 29 foreach ($_GET['class'] as $index => $occupation) { 30 $sub_meta_query[] = [ 31 'key' => 'doll_b', 32 'value' => $occupation, 33 'compare' => '=' 34 ]; 35 } 36 $meta_query[] = $sub_meta_query; 37 } 38 39 40 $query->set('meta_query', $meta_query); 41 } 42} 43add_action( 'pre_get_posts', 'change_pre_get_posts' );
【searchform.php】
php
1<form action="/customer/" method="get"> 2 3 <table> 4 <tbody> 5 <tr> 6 <th width="150">クラス名</th> 7 <td> 8 <div> 9 <label for="talk">クラスA</label> 10 <input type="radio" name="class[]" id="talk" value="話し方クラス" checked> 11 </div> 12 <div> 13 <label for="read">クラスB</label> 14 <input type="radio" name="class[]" id="read" value="朗読クラス"> 15 </div> 16 </td> 17 </tr> 18 <tr> 19 <th>キャラ</th> 20 <td> 21 <select name="prefecture" class="input"> 22 <option value="">-----</option> 23 <option value="キャラA">キャラA</option> 24 <option value="キャラB">キャラB</option> 25 <option value="キャラC">キャラC</option> 26 <option value="キャラD">キャラD</option> 27 </select> 28 </td> 29 </tr> 30 </tbody> 31 </table> 32 <input type="submit" value="検索する" class="button is-primary"> 33</form>
【archive-customer.php】
php
1 <?php get_header();?> 2 3 <?php get_search_form();?> 4 5 6 <?php if (have_posts()): 7 while (have_posts()): 8 the_post(); ?> 9 <?php the_title();?> 10 <?php endwhile;?> 11 <?php endif;?> 12 13<?php var_dump($_GET['class']);?> 14<?php var_dump($_GET['prefecture']);?> 15 16<?php get_footer();?>
みなさまお忙しい中誠に恐縮ですが、どうかお知恵をお貸しいただきたいと存じます。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。