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
相关产品推荐
相关产品推荐

