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

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

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

34 голоса | спросил jerclarke 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 11 Sep 2010 23:38:22 +0400 2010, 23:38:22

4 ответа


40

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

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

  function get_editable_roles () {
    глобальные $ wp_roles;

    $ all_roles = $ wp_roles-> роли;
    $ editable_roles = apply_filters ('editable_roles', $ all_roles);

    return $ editable_roles;
}
 

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

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

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

ответил jerclarke 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 11 Sep 2010 23:41:25 +0400 2010, 23:41:25
9

Попробуйте следующее:

  function get_role_names () {

глобальные $ wp_roles;

if (! isset ($ wp_roles))
    $ wp_roles = новый WP_Roles ();

return $ wp_roles-> get_names ();
}
 

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

ответил Rarst 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 11 Sep 2010 23:47:14 +0400 2010, 23:47:14
0

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

ответил Manuel Costales 26 Jpm1000000pmTue, 26 Jan 2016 23:47:50 +030016 2016, 23:47:50
0

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

  функция wp_roles_array () {
    $ editable_roles = get_editable_roles ();
    foreach ($ editable_roles как $ role => $ details) {
        $ sub ['role'] = esc_attr ($ role);
        $ sub ['name'] = translate_user_role ($ details ['name']);
        $ role [] = $ sub;
    }
    return $ role;
}
 

возвращает такой локализованный массив (имена ролей на словацком языке):

  Массив
(
    [0] => массив
        (
            [role] => администратор
            [name] => Administrátor
        )

    [1] => массив
        (
            [role] => редактор
            [name] => редактор
        )

    [2] => массив
        (
            [role] => автор
            [name] => Autor
        )

    [3] => массив
        (
            [role] => участник
            [name] => Prispievateľ
        )
)
 
ответил Jasom Dotnet 25 Maypm16 2016, 13:58:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132