Как WordPress может перечислять пользователей с определенными возможностями - PullRequest
4 голосов
/ 08 октября 2011

Есть ли способ перечислить только пользователей, которые имеют определенные возможности, например, "publish_posts"?

Ответы [ 3 ]

9 голосов
/ 30 августа 2013

Вы можете просто получить всех пользователей.Затем переберите их в foreach.Проверьте, есть ли у пользователя определенная возможность, а затем отправьте пользователей в другой массив и используйте этот массив для их перечисления.

$all_users = get_users();
$specific_users = array();

foreach($all_users as $user){

    if($user->has_cap('specific_capability')){
        $specific_users[] = $user;
    }

}

ПРИМЕЧАНИЕ: Казалось бы, хорошее быстрое и грязное решение навремя, но сейчас я бы порекомендовал написать запрос.У меня нет времени, чтобы исследовать это для вас, поэтому, если тот, кто отрицает это, будет так любезен ответить на этот вопрос вместо того, чтобы понизить ответ, который был реальной помощью для дознавателя, это было бы неплохо.

7 голосов
/ 11 февраля 2016

Чтобы выбрать пользователей с определенными возможностями, вы можете использовать WP_User_Query с параметром meta_query, потому что WP сохраняет возможности в виде сериализованной строки в таблице user_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.

3 голосов
/ 08 октября 2011

Вы можете перечислить пользователей с помощью WP_User_Query , но на самом деле вы можете возвращать только разные роли, а не разрешения, возможно, это уже то, что вы хотите!Есть также сайт, где вы можете увидеть различные роли в документации WordPress.

...