WordPress中如何正确组合多个meta_query与不同meta_key?
你的写法存在错误,正确实现方式看这里!
嘿,你这么写肯定是不对的!在PHP数组里,如果出现重复的键名(比如你这里重复写了两次meta_query),后面的数组会直接覆盖掉前面的,结果就是你原来那组关于key-check的查询条件完全失效,只会执行another-key => true的检索,这显然不是你想要的效果。
要正确添加新的元查询条件,你需要先明确新条件和原有条件之间的逻辑关系,然后把所有条件整合到同一个meta_query数组里,通过嵌套结构和relation参数来实现复杂逻辑:
情况1:新条件和原有条件是「AND」关系
也就是标签必须同时满足:another-key的值为true,并且(key-check的值为false 或者 key-check不存在)。代码如下:
$args = array( 'taxonomy' => 'post_tag', 'hide_empty' => true, 'meta_query' => array( 'relation' => 'AND', // 外层逻辑:两个条件组必须同时满足 array( 'relation' => 'OR', // 内层逻辑:两个key-check条件满足其一即可 array( 'key' => 'key-check', 'value' => false, ), array( 'key' => 'key-check', 'compare' => 'NOT EXISTS', ), ), array( 'key' => 'another-key', 'value' => true, ), ), );
情况2:新条件和原有条件是「OR」关系
也就是标签满足以下任一条件即可:key-check的值为false,或者key-check不存在,或者another-key的值为true。代码如下:
$args = array( 'taxonomy' => 'post_tag', 'hide_empty' => true, 'meta_query' => array( 'relation' => 'OR', // 所有条件满足其一即可 array( 'key' => 'key-check', 'value' => false, ), array( 'key' => 'key-check', 'compare' => 'NOT EXISTS', ), array( 'key' => 'another-key', 'value' => true, ), ), );
简单来说,核心就是不能重复定义meta_query键,所有的元查询条件都要放在同一个meta_query数组内,通过设置不同层级的relation来控制逻辑关系。
内容的提问来源于stack exchange,提问作者C. Max
相关产品推荐
相关产品推荐

