WordPress如何列出具有特定功能的用户

时间:2011-10-08 08:13:41

标签: wordpress-plugin wordpress

有没有办法只列出具有特定功能的用户,例如“publish_posts”?

4 个答案:

答案 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 ) );