Получение списка доступных в настоящее время ролей на сайте WordPress?


При написании плагинов WordPress часто возникает необходимость настроить параметры, для которых роли на сайте имеют доступ к определенным функциям или контенту. Для этого разработчику плагина необходимо получить список ролей, существующих на сайте, для использования в опции. Поскольку пользовательские роли могут быть созданы, мы не можем предполагать, что роли по умолчанию являются единственными доступными.

Как лучше всего получить список?

Author: MikeSchinkel, 2010-09-11

5 answers

Роли хранятся в глобальной переменной $wp_roles.

Идеальная функция - это get_editable_roles() от /wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

Часть "редактируемая" заключается в том, что она предоставляет другим плагинам возможность фильтровать список на случай, если у кого-то, кроме администратора, есть привилегии 'edit_users' (и, следовательно, "администратор" должен быть удален из списка, иначе этот пользователь мог бы сделать себя администратором). Плагины управления ролями, используемые для создания пользовательских ролей, - это те, которые будут использовать это фильтр. В противном случае эта функция по существу get_roles() ( которого не существует).

Предположительно, ваш плагин будет предлагать соответствующую страницу настроек только тому, кто обладает возможностями уровня администратора, такими как 'manage_options', и в основном является администратором с доступом ко всем ролям, поэтому фильтр не должен влиять на вас.

Есть также wp_dropdown_roles() что дает вам роли в качестве полей <option> для списка <select> (хотя флажки, вероятно, будут работать лучше во многих сценариях где вы выбираете, у кого есть доступ к чему-то).

 54
Author: jerclarke, 2018-08-11 02:28:46

Попробуйте это:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PS хех, пропустил это объяснение и ответ, слишком быстро для меня:)

 14
Author: Rarst, 2010-09-11 19:47:14

Для тех, у кого есть многоязычный сайт, функция

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

Возвращает локализованный массив, подобный этому (имена ролей на словацком языке):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)
 1
Author: Jasom Dotnet, 2016-05-25 10:58:05

Вот как вы можете найти список ролей без каких-либо плагинов или функций http://screencast.com/t/uaWsGLAR3Sh

 0
Author: Manuel Costales, 2016-01-26 20:47:50

Вот как получить массив всех существующих ролей пользователей и возможностей для каждой роли в WordPress. Если вы не хотите выводить его на экран, опустите последнюю строку. Переменная $roles в строке 2 будет содержать массив пользователей и возможностей, чтобы вы могли использовать ее так, как вам нужно. Пример возвращаемого массива приведен ниже.

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
 0
Author: Nuno Sarmento, 2019-09-09 14:30:58