测试密钥是否在USER_META数组中

时间:2013-04-11 作者:Freney

我想通过存储在user\\u meta中的自定义密钥为两个用户关联某些用户。可能存在多个关系,因此它将位于一个数组中。如果两个用户在此\\u mm\\u group\\u成员资格数组中具有相同的密钥,则他们是组的一部分。

现在,由于meta\\u值查询仅限于简单的比较(=,<;,>,等等),因此我建议在组成员身份$key的基础上搜索与$user\\u id相关的用户:

function linked_users_array ($user_id, $key) {
    $group = \'_mm_group_membership\';
    $users = get_users(\'meta_key=\'.$group.\'&fields=all_with_meta\');
    $linked_user_ids = array();
    foreach ($users as $u) {
        if (in_array($key, $u->$group)) {
            $linked_user_ids[] = $u->ID;
        }
    }
    return $linked_user_ids;
}    
关于此的2个问题:

1) $u->$组是否可行?或者我需要使用一些var_dump( $u->get( $group ) );?

2) 我希望尽量减少对数据库的访问,因此我不希望对循环中的每个用户都进行额外的get\\u user\\u meta()调用。这可能吗?

提前谢谢。

1 个回复
最合适的回答,由SO网友:montrealist 整理而成

首先,我认为你的语法是错误的。应为:

$group = \'_mm_group_membership\'; // key should be a string
其次,您是否尝试使用$u->get? 这里是什么the doc says:

如果fields设置为all\\u with\\u meta,它将返回一个WP\\u用户对象数组。

是的,如果你指定了这个参数,你应该得到WP_User 对象返回。是的,那里should be a getterWP_User 对象,但你也需要这样喂它$group 变量以获取键的值。

if($u->has_prop( $group )) {
    $meta_val = $u->get( $group );
}
然后处理您的值,正如您所提到的,它应该是一个数组(用户所在的组?)。您可能需要取消序列化,因为WordPress倾向于在数据库中以字符串的形式保存内容。

结束

相关推荐