Получение списка доступных в настоящее время ролей на сайте WordPress?
-
16-10-2019 - |
Вопрос
При написании плагинов 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>';