実現したいこと
WordPressにカスタムフィールドでの絞り込み検索(チェックボックスの複数選択)を実現したい。
前提
Snow MonkeyというWordPressのテーマを使用して、カスタムフィールドでの絞り込み検索を実現したいと考えております。
テキスト検索やラジオボタンの検索は問題なく作動しますが、チェックボックスで複数選択を可能とするためinputタグのname属性を配列とすると、エラーが発生します。
※下記コードの全文検索とエリア検索は問題なく機能します
発生している問題・エラーメッセージ
Warning: addcslashes() expects parameter 1 to be string, array given in C:\Users\ユーザー名\Local Sites\フォルダ名\app\public\wp-includes\class-wpdb.php on line 1806
該当のソースコード
php
1<?php 2//////////////////////////////// 3// getの値を追加 4//////////////////////////////// 5function add_query_vars_filter($vars) 6{ 7 $vars[] = "all"; 8 $vars[] = "area"; 9 $vars[] = "select_tag"; 10 return $vars; 11} 12add_filter('query_vars', 'add_query_vars_filter'); 13 14//////////////////////////////// 15// アーカイブページにクエリを追加 16//////////////////////////////// 17add_action('pre_get_posts', 'add_archive_custom_query'); // pre_get_postsにフック 18// フック時に使う関数 19function add_archive_custom_query($query) 20{ 21 if (is_admin() || ! $query->is_main_query()) { 22 return; 23 } 24 // GETの引数を取得 25 $get_all = get_query_var('all'); 26 $get_select_tag = get_query_var('select_tag'); 27 $get_area = get_query_var('area'); 28 29 // meta_query を追加 30 $meta_query = array( 31 'relation' => 'AND' 32 ); 33 34 // 全文検索 35 if(!empty($get_all)) { 36 $query->set('s', $get_all); 37 } 38 39 // エリア 40 if(!empty($get_area)) { 41 array_push($meta_query, array( 42 'key' => 'area', 43 'value' => $get_area, 44 'compare' => 'LIKE' 45 )); 46 } 47 48 // チェックボックス 49 if(!empty($get_select_tag)) { 50 array_push($meta_query, array( 51 'key' => 'select_tag', 52 'value' => $get_select_tag, 53 'compare' => 'LIKE' 54 )); 55 } 56 57 $query->set('meta_query', $meta_query); 58} 59 60//Snow Monkeyのフックでカスタム投稿のアーカイブページに検索フォーム追加(今回は「profile」という投稿タイプ) 61add_action( 62 'snow_monkey_before_archive_entry_content', 63 function () { 64 if(is_post_type_archive('profile')) { 65 ?> 66 67<!-- フォームパーツ --> 68<form 69 action="<?=esc_url(home_url('/profile/'))?>"> 70 71 全文検索 72 <input type="text" name="all" 73 value="<?=esc_html(get_query_var('all'))?>"> 74 エリア 75 <input type="text" name="area" 76 value="<?=esc_html(get_query_var('area'))?>"> 77 セレクトタグ 78 <label><input type="checkbox" name="select_tag[]" value="選択肢1" 79 <?=in_array('選択肢1', (array)get_query_var('select_tag')) ? ' checked' : ''?>> 80 選択肢1</label> 81 <label><input type="checkbox" name="select_tag[]" value="選択肢2" 82 <?=in_array('選択肢2', (array)get_query_var('select_tag')) ? ' checked' : ''?>> 83 選択肢2</label> 84 85 <?php wp_nonce_field('my-archive-nonce', 'nonce'); ?> 86 <button type="submit">検索する</button> 87 88</form> 89 90<?php 91 } 92 } 93); 94?>
試したこと
セレクトタグ(チェックボックス)のname属性の[]を削除するとエラーは発生しませんが、複数選択での絞り込みが不可となります。
(最後の選択肢のみの絞り込みとなる)
補足情報(FW/ツールのバージョンなど)
使用しているWordPressのバージョンは6.2、PHPのバージョンは7.4です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。