有没有一种简单的方法可以在 Wordpress 帖子过滤器中使用"任何"选项?



我正在学习PHP,为我的自定义帖子类型(平面图(创建一个过滤器,可以通过几个不同的自定义字段(卧室、浴室等(进行过滤。我有一个简单的HTML表单,其中包含不同字段的下拉列表。然后将该值传递到wp_query数组中。我想要的是有一个"任意"字段。因此,用户可以选择"任意",然后查看所有平面图,而不是从过滤器中选择"2"、"3"或"4"间卧室。我希望有一种方法可以做到这一点,这样我就可以将一些值传递到查询中并使其工作,但如果我需要创建一个新函数,我也可以这样做。

这是我的过滤器的代码,也是查询帖子的代码。

<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
<?php
$field_key_style = "field_5fac80ce68b66"; // <-- Property Style
$field_style = get_field_object($field_key_style);
if( $field_style ) { ?>
<label> Style
<select name="stylefilter" class="filterdropdown" >
<option value=""> Any </option>
<?php
foreach( $field_style['choices'] as $k => $v ) {
echo '<option value="' . $k . '"> ' . $v . '</option>';} ?>
</select></label> <?php
}
?>
<div>
<label> Bedrooms
<select name="bedroomsfilter" class="filterdropdown" >
<option value ="*"> Any </option>
<option value ="2"> 2 </option>
<option value ="3"> 3 </option>
<option value ="4"> 4 </option>
<option value ="5"> 5 </option>
</select></label>
</div>
<div>
<label> Bathrooms
<select name="bathroomsfilter" class="filterdropdown" >
<option value ="all"> Any </option>
<option value ="2"> 2 </option>
<option value ="3"> 3 </option>
</select></label>
</div>
<input type="hidden" name="action" value="myfilter">
</form>
function misha_filter_function(){
$args = array(
'post_type' => 'floorplans',
'post_status' => 'published',
'posts_per_page' => -1,
'meta_query'     => array(
'relation'        => 'AND',
array(
'key'     => 'style',
'value'   => $_POST['stylefilter'],
),
array(
'key'     => 'bedrooms',
'value'   => $_POST['bedroomsfilter'],
'type'        => 'NUMERIC',
'compare' => '='
),
array(
'key'     => 'bathrooms',
'value'   => $_POST['bathroomsfilter'],
'type'        => 'NUMERIC',
'compare' => '='
),
),
);
$query = new WP_Query( $args );

谢谢你的帮助。

用一些if/else语句回答:

function misha_filter_function(){
$args = array(
'post_type' => 'floorplans',
'post_status' => 'published',
'posts_per_page' => -1,
'meta_query'     => array(
'relation'        => 'AND'));

//bedrooms
if ( $_POST['bedroomsfilter'] == 'any')
{
$args['meta_query'][] = array(
'key' => 'bedrooms'
);
} else {
$args['meta_query'][] = array(
'key' => 'bedrooms',
'value' => $_POST['bedroomsfilter'],
'type' => 'numeric',
'compare' => '='
);
}
//bathrooms
if ( $_POST['bathroomsfilter'] == 'any')
{
$args['meta_query'][] = array(
'key' => 'bathrooms',
);
} else {
$args['meta_query'][] = array(
'key' => 'bathrooms',
'value' => $_POST['bathroomsfilter'],
'type' => 'numeric',
'compare' => '='
);
}
//style
if ( $_POST['stylefilter'] == 'any')
{
$args['meta_query'][] = array(
'key'     => 'style'
);
} else {
$args['meta_query'][] = array(
'key'     => 'style',
'value'   => $_POST['stylefilter']
);
}

$query = new WP_Query( $args );

最新更新