You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建WP_User_Query查询数组时,邮编OR查询被自动转为AND的问题

问题解决:WP_User_Query中邮编OR查询被自动转为AND的修复

你的问题出在meta_query的数组结构错误,WordPress解析meta_query时,只会识别每个顶级数组里的relation,而你现在的写法是把relation => 'OR'单独作为一个元素塞进了meta_query数组,之后的每个邮编条件又多套了一层数组,导致WordPress无法识别这个OR关系,默认用AND来关联所有条件。

错误写法的问题点:

你当前的代码会让meta_query变成这样的结构(假设$zips有两个值):

'meta_query' => array(
    'relation' => 'AND',
    // 原有四个条件...
    array('relation' => 'OR'),
    array(array('key' => 'shipping_postcode', ...)),
    array(array('key' => 'shipping_postcode', ...))
)

这种结构下,WordPress会把每个顶级数组元素都当作独立的查询条件,默认用AND关联,所以你的OR根本没起作用。

正确的写法:

应该把所有邮编查询打包成一个子查询组,这个组内部用OR关联,然后把这个组作为一个整体加到原有的meta_query里:

// 先创建邮编查询的子组
$zip_query = array(
    'relation' => 'OR'
);

foreach($zips as $zip) {
    $zip_query[] = array(
        'key' => 'shipping_postcode',
        'value' => $zip,
        'compare' => '=',
    );
}

// 把这个子组加到原有的meta_query中
$args['meta_query'][] = $zip_query;

这样最终的meta_query结构是:

'meta_query' => array(
    'relation' => 'AND',
    // 原有四个条件...
    array(
        'relation' => 'OR',
        // 各个邮编条件...
    )
)

此时WordPress会正确识别:原有四个条件用AND关联,同时还要满足邮编子组里的任意一个OR条件,整体逻辑是**(原有条件1 AND 原有条件2 ...) AND (邮编1 OR 邮编2 ...)**。

验证方法

修改后可以再次通过$wpUserQuery->request查看生成的SQL,应该能看到邮编部分用OR连接的条件,而不是全部用AND。

内容的提问来源于stack exchange,提问作者Eric Kowalewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:40:29