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

wordpress.stackexchange https://wordpress.stackexchange.com/questions/1665

Вопрос

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

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

Это было полезно?

Решение

Роли хранятся в глобальной переменной $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> список (Хотя флажки, вероятно, будут лучше работать во многих сценариях, где вы выбираете, кто к чему -то имеет доступ).

Другие советы

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

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

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

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

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

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ľ
        )
)

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

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top