有没有办法只列出具有特定功能的用户,例如“publish_posts”?
答案 0 :(得分:8)
您可以只检索所有用户。然后在foreach中循环遍历它们。检查用户是否具有特定功能,然后将用户推送到另一个阵列并使用该阵列列出它们。
$all_users = get_users();
$specific_users = array();
foreach($all_users as $user){
if($user->has_cap('specific_capability')){
$specific_users[] = $user;
}
}
注意:强> 这在当时似乎是一个很好的快速和肮脏的解决方案,但现在我建议写一个查询。我没有时间为你调查这个问题,所以如果一个人贬低这个问题就可以回答这个问题,而不是低估答案,这对查询者来说是一个真正的帮助,那就太好了。
答案 1 :(得分:7)
要选择具有某些功能的用户,可以将WP_User_Query与meta_query参数一起使用,因为WP将功能存储为user_meta表中的序列化字符串。 还要记住,由于具有多站点安装功能,用户meta中的名称类似于wp_table_prefix_capabilities。
global $wpdb;
// meta-key name
$capabilities_field_name=$wpdb->prefix.'capabilities';
//array as argument for our query
$qargs=[
'role' => ['Customer'], // use this if you need to query by role at the same time
'meta_query'=>
[
'relation' => 'OR', // optional if you'll need to select more than
// one capability just add this and create same array
// as down below describing what are you looking for
[
'key' => $capabilities_field_name,
'value' => 'your_role_name',
'compare' => 'LIKE',
],
// here could be same array [key,value,compare]... as above with another capability
// but you'll need to add extra argument showing relationship between them see above 'relation parameter'
],
'number'=> -1 // to select all users
];
$usersQuery=new WP_User_Query($qargs); // instantiate UserQuery with $qargs
$users=$usersQuery->get_results(); // get all results as array of WPUser objects
希望有人帮助:) 注意[vars]可以替换为数组(vars),我喜欢[]短语法,但只有php 5.4才支持。
答案 2 :(得分:3)
您可以使用WP_User_Query列出用户,但是您只能返回不同的角色,而不是权限,也许这已经是您想要的了!还有一个网站,您可以在wordpress文档中看到不同的roles。
答案 3 :(得分:0)
您首先需要获取包含该功能的所有角色。然后,您可以根据包含该功能的角色搜索用户。
$roles = array();
foreach ( wp_roles()->roles as $role_name => $role_obj ) {
if ( ! empty( $role_obj['capabilities']['my_capability_name'] ) ) {
$roles[] = $role_name;
}
}
$users = get_users( array( 'role__in' => $roles ) );