jerclarke
  • 0
Эксперт

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

  • 0

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

Каков наилучший способ получить список?

Share
  1. Примечание. Первоначально этот вопрос был задан Райаном Билески в списке рассылки wp-hackers, и я ответил на него. Я добавил его здесь, потому что это явный пример вопроса о передовой практике, который люди могут задать Google 🙂

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

    • 0
  3. Попробуй это:

    function get_role_names() {
    
    global $wp_roles;
    
    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();
    
    return $wp_roles->get_names();
    }
    

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

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

    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ľ
            )
    )
    
    • 0
  5. Вот как получить массив всех существующих пользовательских ролей и возможностей для каждой роли в WordPress. Если вы не хотите выводить его на экран, опустите последнюю строку. Переменная $roles в строке 2 будет содержать массив пользователей и возможностей, чтобы вы могли использовать ее по своему усмотрению. Ниже приведен пример возвращаемого массива.

    global $wp_roles;
    $roles = $wp_roles->roles; 
    
    // print it to the screen
    echo '<pre>' . print_r( $roles, true ) . '</pre>';
    
    • 0
  6. Вот как вы можете найти список ролей без каких-либо плагинов или функций http://screencast.com/t/uaWsGLAR3Sh

    • 0

Оставить ответ

You must login to add an answer.