Получение списка доступных в настоящее время ролей на сайте WordPress?
При написании плагинов WordPress часто возникает необходимость настроить параметры, для которых роли на сайте имеют доступ к определенным функциям или контенту. Для этого разработчику плагина необходимо получить список ролей, существующих на сайте, для использования в опции. Поскольку пользовательские роли могут быть созданы, мы не можем предполагать, что роли по умолчанию являются единственными доступными.
Как лучше всего получить список?
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>
(хотя флажки, вероятно, будут работать лучше во многих сценариях где вы выбираете, у кого есть доступ к чему-то).
Попробуйте это:
function get_role_names() {
global $wp_roles;
if ( ! isset( $wp_roles ) )
$wp_roles = new WP_Roles();
return $wp_roles->get_names();
}
PS хех, пропустил это объяснение и ответ, слишком быстро для меня:)
Для тех, у кого есть многоязычный сайт, функция
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ľ
)
)
Вот как вы можете найти список ролей без каких-либо плагинов или функций http://screencast.com/t/uaWsGLAR3Sh
Вот как получить массив всех существующих ролей пользователей и возможностей для каждой роли в WordPress. Если вы не хотите выводить его на экран, опустите последнюю строку. Переменная $roles в строке 2 будет содержать массив пользователей и возможностей, чтобы вы могли использовать ее так, как вам нужно. Пример возвращаемого массива приведен ниже.
global $wp_roles;
$roles = $wp_roles->roles;
// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';