如何通过meta_key与meta_values数组查询WordPress用户?
解决WordPress用文章ID数组查询用户的问题
我来帮你搞定这个查询问题!首先得先搞清楚你的用户元数据my_key是怎么存的——是单个文章ID,还是序列化后的数组?这直接决定了查询的写法,我分两种情况给你解决方案:
情况1:my_key存的是单个文章ID(每个用户只关联一个文章ID)
这种情况最简单,直接用IN比较符就能匹配数组里的任意ID,记得指定type为NUMERIC(因为文章ID是数字,避免字符串匹配的问题):
// 假设你已经拿到了文章ID数组 $post_ids $post_ids = array(100, 101, 102, 103); // 构建用户查询参数 $user_query_args = array( 'meta_query' => array( array( 'key' => 'my_key', 'value' => $post_ids, 'compare' => 'IN', 'type' => 'NUMERIC' ) ) ); // 执行用户查询 $user_query = new WP_User_Query($user_query_args); // 输出匹配的用户 print_r($user_query->get_results());
情况2:my_key存的是文章ID数组(每个用户关联多个文章ID,序列化存储)
如果你的my_key里是序列化后的数组(比如数据库里存的是a:2:{i:0;i:102;i:1;i:103;}),直接用IN就不管用了,这时候可以用两种方式处理:
方式A:遍历用户筛选交集
先查出所有有my_key的用户,再逐个检查他们的文章ID数组和目标数组是否有交集:
$post_ids = array(100, 101, 102, 103); // 先获取所有有my_key元数据的用户 $user_query_args = array( 'meta_query' => array( array( 'key' => 'my_key', 'compare' => 'EXISTS' ) ) ); $user_query = new WP_User_Query($user_query_args); $matching_users = array(); // 遍历用户,检查是否有匹配的文章ID foreach ($user_query->get_results() as $user) { // 获取用户的文章ID数组(true确保返回数组而非序列化字符串) $user_post_ids = get_user_meta($user->ID, 'my_key', true); // 检查两个数组是否有交集 if (is_array($user_post_ids) && !empty(array_intersect($user_post_ids, $post_ids))) { $matching_users[] = $user; } } // 输出匹配的用户 print_r($matching_users);
方式B:用LIKE匹配序列化数组
利用序列化数组的格式特征(数字ID会被双引号包裹),构建OR条件的meta查询:
$post_ids = array(100, 101, 102, 103); // 构建OR条件的meta查询 $meta_query = array('relation' => 'OR'); foreach ($post_ids as $id) { $meta_query[] = array( 'key' => 'my_key', 'value' => '"' . $id . '"', // 匹配序列化数组里的单个ID 'compare' => 'LIKE' ); } $user_query_args = array('meta_query' => $meta_query); $user_query = new WP_User_Query($user_query_args); print_r($user_query->get_results());
几个关键检查点
- 确认
my_key的存储格式:用get_user_meta($某个用户ID, 'my_key', false)看原始数据,判断是单个值还是序列化数组 - 别搞混WP_Query和WP_User_Query:你之前查文章用的是WP_Query,查用户必须用WP_User_Query,参数结构虽然类似但有区别
- 权限问题:如果是在前端查询,确保当前用户有查询用户列表的权限(比如管理员权限,或者用
pre_get_users钩子调整权限)
内容的提问来源于stack exchange,提问作者DakotaDC3
相关产品推荐
相关产品推荐

