WP_Query meta_query AND关系无返回及IN反向比较方法咨询
问题1:组合meta_query无返回结果的排查方案
直接可修复的语法错误
你提供的代码中第一个meta条件的compare参数存在语法问题,等于号没有用引号包裹:
// 错误写法 'compare' => =, // 修正后写法 'compare' => '=',
该语法问题可能导致查询解析异常,优先修正后测试是否正常返回结果。
仍无结果的进一步排查方案
如果修正后还是无法查询到符合条件的文章,可输出查询生成的原生SQL直接定位问题:
在new WP_Query($args)后添加以下代码,打印原生SQL语句:
echo $the_query->request;
将输出的SQL直接放到数据库执行,即可直观看到匹配逻辑的问题点。常见的隐藏问题包括:
- 自定义字段存储的是序列化数组,
IN查询无法直接匹配序列化后的字符串(但你单独查询第二个条件正常,该概率较低) - 字段值存在前后空格等不可见字符,导致匹配失败
问题2:meta_query相关参数说明
- 与
IN功能相反的compare取值:为NOT IN,使用后会返回字段值不在指定value数组范围内的文章。 - value数组为空时筛选字段不为空的配置:
当第二个筛选条件的value数组为空时,可直接将对应条件改为如下配置,即可筛选出所有该字段值不为空的文章:
array( 'key' => 'cost_per_month_ipcenter_filter_new', 'value' => '', 'compare' => '!=', )
如果需要同时排除没有设置该自定义字段的文章,可以补充EXISTS条件:
array( 'relation' => 'AND', array( 'key' => 'cost_per_month_ipcenter_filter_new', 'compare' => 'EXISTS', ), array( 'key' => 'cost_per_month_ipcenter_filter_new', 'value' => '', 'compare' => '!=', ) )
内容的提问来源于stack exchange,提问作者DavSev
相关产品推荐
相关产品推荐

