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

WordPress中meta_query过滤用户失效:含abc邮箱却返回空结果

解决WordPress中get_users()按邮箱筛选无效的问题

看来你遇到了用meta_query筛选用户邮箱却返回空结果的问题,我帮你梳理几个最可能的原因和对应的解决方案:

1. 核心问题:默认用户邮箱不在自定义元数据中

WordPress的用户邮箱默认存储在wp_users表的user_email字段,而不是wp_usermeta表的email元键里。你的代码用meta_query查询email键,相当于在寻找自定义存储的邮箱数据,而非系统默认的用户邮箱,这大概率是返回空的根本原因。

正确的筛选方式(针对系统默认邮箱)

如果你要筛选系统自带的用户邮箱,应该用search和search_columns参数,而非meta_query:

$args = array(
    'role' => 'customer',
    // 用通配符包裹关键词,实现模糊匹配
    'search' => '*' . esc_attr( 'abc' ) . '*',
    // 指定只在邮箱字段中搜索
    'search_columns' => array( 'user_email' )
);
$customers = get_users( $args );

2. 如果你确实是用自定义元数据存储邮箱

如果你是自己把邮箱存在了wp_usermeta的email键下,那检查这几点:

  • 元键名称是否准确:比如是否是大小写敏感(比如实际是Email或_email),可以直接查看数据库的wp_usermeta表确认键名。
  • 添加meta_query的type参数:明确指定字段类型,帮助SQL查询更准确:
    $args = array(
        'role' => 'customer',
        'meta_query' => array(
            array(
                'key' => 'email',
                'value' => 'abc',
                'compare' => 'LIKE',
                'type' => 'CHAR' // 指定类型为字符型
            )
        )
    );
    $customers = get_users( $args );
    

3. 确认角色名称的正确性

确保你的用户角色确实是customer(比如WooCommerce的客户角色是这个名称),如果是自定义角色,可能名称不同。可以用下面的代码打印所有可用角色,确认角色slug:

print_r( get_editable_roles() );

内容的提问来源于stack exchange,提问作者Amar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:08:40