我想通过存储在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()调用。这可能吗?
提前谢谢。
最合适的回答,由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 getter 在WP_User
对象,但你也需要这样喂它$group
变量以获取键的值。
if($u->has_prop( $group )) {
$meta_val = $u->get( $group );
}
然后处理您的值,正如您所提到的,它应该是一个数组(用户所在的组?)。您可能需要取消序列化,因为WordPress倾向于在数据库中以字符串的形式保存内容。