Функция get_editable_roles()
возвращает отфильтрованный список ролей пользователей, которые текущий пользователь может редактировать. Эта функция позволяет администраторам ограничивать доступ к изменению ролей пользователей на основе их прав, что особенно полезно для управления редакторами и другими уровнями доступа.
get_editable_roles(): array[]
Описание:
Функция возвращает массив с ролями и соответствующими им возможностями (capabilities), которые текущий пользователь может редактировать. Важной особенностью является фильтрация ролей через хук editable_roles
, что позволяет плагинам ограничивать возможность редактирования определенных ролей в зависимости от ситуации или прав пользователя.
Возвращаемое значение:
- array[] — Массив массивов, содержащих информацию о ролях и их возможностях (capabilities).
Пример 1: Вывод списка редактируемых ролей
Этот пример показывает, как вывести список всех ролей, которые текущий пользователь может редактировать, с отображением их возможностей:
<dl>
<?php foreach (get_editable_roles() as $role_name => $role_info): ?>
<dt><?php echo $role_name; ?></dt>
<dd>
<ul>
<?php foreach ($role_info['capabilities'] as $capability => $_): ?>
<li><?php echo $capability; ?></li>
<?php endforeach; ?>
</ul>
</dd>
<?php endforeach; ?>
</dl>
Результат:
Этот код отобразит список всех редактируемых ролей и их возможностей в виде списка HTML.
Пример 2: Получение отфильтрованного списка ролей
Для ограничения списка ролей можно использовать фильтр editable_roles
. Например, если вы хотите убрать роль «Administrator» для всех пользователей, кроме супер-администраторов, можно добавить следующий код в файл плагина или темы:
add_filter('editable_roles', 'remove_administrator_role');
function remove_administrator_role($roles) {
if (!current_user_can('manage_options')) {
unset($roles['administrator']);
}
return $roles;
}
Результат:
Этот код уберет роль администратора из списка редактируемых ролей для всех пользователей, которые не обладают правом manage_options
.
Пример 3: Использование функции в выпадающем списке
Функция get_editable_roles()
может быть использована для создания выпадающего списка с ролями. Вот пример использования:
function wp_dropdown_roles($selected = '') {
$r = '';
$editable_roles = array_reverse(get_editable_roles());
foreach ($editable_roles as $role => $details) {
$name = translate_user_role($details['name']);
$r .= "\n\t<option " . selected($selected, $role, false) . " value='" . esc_attr($role) . "'>$name</option>";
}
echo $r;
}
Результат:
Эта функция создаст выпадающий список с доступными для редактирования ролями.
Пример 4: Получение массива редактируемых ролей
Пример возвращаемого массива с ролями в чистой установке WordPress может выглядеть так:
Array
(
[administrator] => Array
(
[name] => Administrator
[capabilities] => Array
(
[switch_themes] => 1
[edit_themes] => 1
[activate_plugins] => 1
...
)
)
[editor] => Array
(
[name] => Editor
[capabilities] => Array
(
[moderate_comments] => 1
[edit_posts] => 1
...
)
)
[author] => Array
(
[name] => Author
[capabilities] => Array
(
[edit_posts] => 1
[publish_posts] => 1
...
)
)
...
)
Подключение функции во фронтэнде
Для того чтобы использовать get_editable_roles()
во фронтэнде сайта (не в админке), необходимо подключить файл user.php
:
require_once ABSPATH . 'wp-admin/includes/user.php';
Это гарантирует, что функции для работы с пользователями WordPress будут доступны в любом месте вашего кода.
Заключение
Функция get_editable_roles()
— это мощный инструмент для управления ролями и возможностями пользователей в WordPress. Она позволяет ограничивать доступ к редактированию ролей, гибко настраивать интерфейсы админки и управлять безопасностью сайта, предоставляя только необходимые роли для редактирования в зависимости от прав пользователя.