ユーザーがサービスの対象となる複数のエリアを選択できるチェックボックスグループ「エリア」を含むカスタム投稿タイプがあります。
フロントエンドでは、ユーザーが基本的な基準で絞り込むことができるカスタム検索クエリを用意しています。
問題なく動作していますが、チェックボックスで壁にぶつかりました。meta_key 値に配列をフィードしようとしましたが (これまでに内破および爆発を試みました)、最初にチェックされたアイテムを登録することしかできません。
私のHTMLフォーム:
<form id="searchform" method="post" action="">
<fieldset>
<select name="service">
<option value="" <?php if(isset($_GET['service']) && $_GET['service'] == "") { echo 'selected'; } ?>>All</option>
<option value="3" <?php if(isset($_GET['service']) && $_GET['service'] == '3') { echo 'selected'; } ?>>Advocacy and Advice</option>
<option value="0">Alcohol and Drug Partnership</option>
<option value="0">Befriending</option>
<option value="0">Care & Support at Home</option>
<option value="4" <?php if(isset($_GET['service']) && $_GET['service'] == '4') { echo 'selected'; } ?>>Care Homes</option>
</select>
<label class="radio" for="order-0">
<input name="order" id="order-0" value="ASC" type="radio" <?php if(isset($_GET['order']) && $_GET['order'] == 'DESC' || !$_GET['order']) { echo 'checked'; } ?>>
Ascending
</label>
<label class="radio" for="order-1">
<input name="order" id="order-1" value="DESC" type="radio" <?php if(isset($_GET['order']) && $_GET['order'] == 'DESC') { echo 'checked'; } ?>>
Descending
</label>
<h3>Areas covered</h3>
<div class="form-group">
<div class="col-md-4">
<div class="checkbox">
<label>
<input name="areas[]" value="Ardrossan" type="checkbox" class="check">
Ardrossan
</label>
</div>
<div class="checkbox">
<label>
<input name="areas[]" value="Largs" type="checkbox" class="check">
Largs
</label>
</div>
</div>
</div>
<div class="clearfix"></div>
<button type="submit" class="button green">Search</button>
</fieldset>
</form>
私のクエリ:
$custom_taxterms = wp_get_object_terms( $post->ID, 'category', array('fields' => 'ids') );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if($_POST['areas']) {
$areas = $_POST['areas'];
$areas = implode(',',$areas);
}
else { $areas = ''; }
if($_GET['service']) {
$service = $_POST['service'];
}
else { $service = 0; }
if($_GET['order']) {
$order = $_POST['order'];
}
else { $order = 'ASC'; }
$args = array(
'post_type' => 'provider_listing',
'cat' => $service,
'order' => $order,
'paged' => $paged,
'meta_query' => array(
array (
'key' => 'areas_covered',
'value' => $areas,
'compare' => 'LIKE'
)
)
);
$providers = query_posts($args);
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
......