WP_Query中meta_query与tax_query组合仅选meta值无结果如何解决
问题根因
- 未选中分类时,
tax_query传入了空的terms参数,WordPress会将其解析为匹配无对应分类项的文章,直接过滤掉所有结果 meta_query结构错误:将relation写为字符串常量而非数组键,同时把meta条件数组作为嵌套子数组传入,不符合WP_Query的参数规范
修正代码(仍然使用原生WP_Query,符合不使用自定义SQL查询的要求)
$category_array= []; $metabox_array = []; foreach($_POST as $key => $value){ if($key == 'ms_product_categories'){ foreach($value as $cat_slug){ $category_array[] = $cat_slug; } }else{ $metabox_array[] = array('key' => $key, 'value' => $value ); } } $args = array( 'post_type' => 'ms_product', ); // 仅当有meta筛选条件时添加meta_query if(!empty($metabox_array)){ $meta_query = $metabox_array; if(count($metabox_array) >= 2){ $meta_query['relation'] = 'AND'; } $args['meta_query'] = $meta_query; } // 仅当有分类筛选条件时添加tax_query if(!empty($category_array)){ $args['tax_query'] = array( array( 'taxonomy' => 'ms_product_categories', 'field' => 'slug', 'terms' => $category_array ), ); } $ms_products = new WP_Query( $args );
内容的提问来源于stack exchange,提问作者Amirul Islam
相关产品推荐
相关产品推荐

