Хук editable_roles
в WordPress предоставляет гибкость в настройке списка ролей, доступных для назначения пользователям. Он полезен для проектов, где необходимы уникальные роли или для случаев, когда стандартные роли WordPress нужно скрыть или видоизменить.
apply_filters( ‘editable_roles’, array[] $all_roles )
Хук editable_roles
фильтрует массив $all_roles
, содержащий данные обо всех зарегистрированных ролях на сайте. Этот хук вызывается функцией get_editable_roles()
и используется для создания списка ролей, которые текущий пользователь может назначать другим пользователям.
Пример 1: Скрытие ролей с определенным уровнем доступа
Предположим, что необходимо скрыть роли с уровнем выше текущего пользователя. Например, если текущий пользователь имеет уровень 2
, то роли с уровнем 3
и выше будут недоступны для назначения.
add_filter('editable_roles', 'remove_higher_levels');
function remove_higher_levels($all_roles) {
$current_user = wp_get_current_user();
$max_level = 'level_' . ($current_user->user_level + 1);
foreach ($all_roles as $role_name => $role_info) {
if (isset($role_info['capabilities'][$max_level])) {
unset($all_roles[$role_name]);
}
}
return $all_roles;
}
В этом примере роли, которые требуют более высокого уровня доступа, чем у текущего пользователя, будут исключены из списка назначаемых.
Пример 2: Добавление опции «Без роли» для страниц, отличных от профиля
Этот пример добавляет специальную роль «— Без роли для этого сайта —» на страницах управления пользователями, за исключением экрана редактирования профиля.
add_filter('editable_roles', 'add_empty_editable_role');
function add_empty_editable_role($all_roles) {
$current_screen = get_current_screen();
if (!isset($all_roles['']) && $current_screen->id !== 'user-edit') {
$all_roles[''] = array(
'name' => __('— Без роли для этого сайта —'),
'capabilities' => array(),
);
}
return $all_roles;
}
Данная функция позволяет создать пустую роль, которая будет доступна только на определённых экранах, исключая экран профиля.
Пример 3: Исключение стандартных ролей WordPress из списка
В проектах, где используются только пользовательские роли, стандартные роли могут быть скрыты для упрощения интерфейса.
add_filter('editable_roles', 'hide_default_roles');
function hide_default_roles($all_roles) {
unset($all_roles['editor']);
unset($all_roles['author']);
unset($all_roles['contributor']);
unset($all_roles['subscriber']);
return $all_roles;
}
Здесь мы удаляем стандартные роли editor
, author
, contributor
и subscriber
из списка доступных для назначения, чтобы оставить только пользовательские роли.
Заключение
Хук editable_roles
предоставляет обширные возможности для настройки системы ролей WordPress. Вы можете адаптировать роли в зависимости от ваших требований и уровня доступа пользователей, создавая более индивидуализированный опыт для администратора и пользователей.