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

如何通过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());

几个关键检查点

  1. 确认my_key的存储格式:用get_user_meta($某个用户ID, 'my_key', false)看原始数据,判断是单个值还是序列化数组
  2. 别搞混WP_Query和WP_User_Query:你之前查文章用的是WP_Query,查用户必须用WP_User_Query,参数结构虽然类似但有区别
  3. 权限问题:如果是在前端查询,确保当前用户有查询用户列表的权限(比如管理员权限,或者用pre_get_users钩子调整权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:21:24