如果存在,如何仅应用 (Wordpress) 元查询
How to only apply a (Wordpress) meta query if it exists
我正在尝试在产品列表中应用过滤器。用户将在前端使用 select 个框,然后单击一个按钮来筛选产品。
每个产品都是它自己的 post,所以我使用 WP_Query 来获取 post。例如,我想要颜色 "red"、material "plastic" 和品牌 "Bikon" 的所有产品。所以我使用;
$color = "red";
$material = "plastic";
$brand = "Bikon";
$query = new WP_Query(array(
'post_type' => 'products',
'posts_per_page' => 6,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => $color,
'compare' => '='
),
array(
'key' => 'material',
'value' => $material,
'compare' => '='
),
array(
'key' => 'brand',
'value' => $brand,
'compare' => '='
)
)
));
如果每个值都已设置,这将正常工作。但是如果只使用了 select 个框之一,其他两个值将为空并且查询将不会 return 任何 posts。有什么办法可以说"only use this array in the meta query if this value is set"?
您可以检查变量的定义并添加额外的过滤(如果存在)
$query_args = array(
'post_type' => 'products',
'posts_per_page' => 6,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'product_check',
'compare' => 'EXISTS',
),
),
);
if(isset($color) && $color) {
$query_args['meta_query'][] = array('key' => 'color', 'value' => $color, 'compare' => '=');
}
if(isset($material ) && $material ) {
$query_args['meta_query'][] = array('key' => 'material ', 'value' => $material , 'compare' => '=');
}
if(isset($brand ) && $brand ) {
$query_args['meta_query'][] = array('key' => 'brand ', 'value' => $brand , 'compare' => '=');
}
$query = new WP_Query($query_args);
我正在尝试在产品列表中应用过滤器。用户将在前端使用 select 个框,然后单击一个按钮来筛选产品。
每个产品都是它自己的 post,所以我使用 WP_Query 来获取 post。例如,我想要颜色 "red"、material "plastic" 和品牌 "Bikon" 的所有产品。所以我使用;
$color = "red";
$material = "plastic";
$brand = "Bikon";
$query = new WP_Query(array(
'post_type' => 'products',
'posts_per_page' => 6,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => $color,
'compare' => '='
),
array(
'key' => 'material',
'value' => $material,
'compare' => '='
),
array(
'key' => 'brand',
'value' => $brand,
'compare' => '='
)
)
));
如果每个值都已设置,这将正常工作。但是如果只使用了 select 个框之一,其他两个值将为空并且查询将不会 return 任何 posts。有什么办法可以说"only use this array in the meta query if this value is set"?
您可以检查变量的定义并添加额外的过滤(如果存在)
$query_args = array(
'post_type' => 'products',
'posts_per_page' => 6,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'product_check',
'compare' => 'EXISTS',
),
),
);
if(isset($color) && $color) {
$query_args['meta_query'][] = array('key' => 'color', 'value' => $color, 'compare' => '=');
}
if(isset($material ) && $material ) {
$query_args['meta_query'][] = array('key' => 'material ', 'value' => $material , 'compare' => '=');
}
if(isset($brand ) && $brand ) {
$query_args['meta_query'][] = array('key' => 'brand ', 'value' => $brand , 'compare' => '=');
}
$query = new WP_Query($query_args);