В WordPress роли пользователей играют ключевую роль в управлении доступом к функционалу сайта. Однако стандартный набор ролей и их возможностей не всегда подходят для конкретных задач. Часто возникает необходимость изменить права пользователей, добавить или убрать возможности из существующих ролей без использования плагинов. В этой статье мы подробно разберем, как это сделать, используя встроенные функции WordPress.
Почему стоит изменять роли пользователей без плагинов
Плагины для управления ролями, такие как User Role Editor, популярны и удобны, но не всегда нужны. Если вы хотите минимизировать количество установленных плагинов, улучшить производительность сайта и иметь полный контроль над изменениями, лучше работать напрямую с функциями WordPress. Это также повышает безопасность — меньше кода сторонних разработчиков, меньше потенциальных уязвимостей.
Кроме того, такой подход отлично подходит для разработчиков, которым нужно внедрить кастомные изменения ролей в тему или собственный плагин.
Основные функции для управления ролями в WordPress
В WordPress для работы с ролями и правами используются объекты WP_Role и класс WP_Roles. Основные функции для изменения ролей:
add_role( $role, $display_name, $capabilities )— добавляет новую роль с указанными возможностями.remove_role( $role )— удаляет роль.get_role( $role )— возвращает объект роли для изменения.
Для управления возможностями (capabilities) роли используются методы объекта роли:
add_cap( $capability )— добавляет право.remove_cap( $capability )— удаляет право.
Практический пример: добавление и изменение прав существующей роли
Допустим, нам нужно изменить роль editor, добавив возможность управлять плагинами, чего по умолчанию у редактора нет.
function wpexamples_modify_editor_role() {
$role = get_role( 'editor' );
if ( ! $role ) {
return;
}
// Добавляем возможность управлять плагинами
$role->add_cap( 'activate_plugins' );
$role->add_cap( 'edit_plugins' );
$role->add_cap( 'install_plugins' );
$role->add_cap( 'delete_plugins' );
}
add_action( 'init', 'wpexamples_modify_editor_role' );Этот код добавляет необходимые права при инициализации WordPress. Теперь редактор сможет активировать, деактивировать, устанавливать и удалять плагины.
Как создать новую роль с кастомными правами
Иногда проще создать новую роль с нужным набором возможностей. Рассмотрим пример создания роли content_manager, которая сможет редактировать все записи, но не управлять настройками сайта.
function wpexamples_add_content_manager_role() {
add_role( 'content_manager', 'Контент менеджер', array(
'read' => true,
'edit_posts' => true,
'edit_others_posts' => true,
'publish_posts' => true,
'delete_posts' => true,
'upload_files' => true,
// Убираем административные возможности
'manage_options' => false,
'edit_theme_options' => false
) );
}
add_action( 'init', 'wpexamples_add_content_manager_role' );После добавления роли вы можете назначить её пользователям через админку WordPress.
Удаление прав у существующей роли
Если нужно убрать права у роли, например у author убрать возможность удалять записи, используйте метод remove_cap:
function wpexamples_remove_author_delete_cap() {
$role = get_role( 'author' );
if ( ! $role ) {
return;
}
$role->remove_cap( 'delete_posts' );
}
add_action( 'init', 'wpexamples_remove_author_delete_cap' );Это позволит гибко настраивать права без плагинов.
Советы по работе с ролями и правами
Используйте хуки правильно
Лучше всего изменения ролей делать на хук init, когда уже загружена вся система, но еще не начался вывод страницы. Это гарантирует, что все функции WordPress доступны.
Не удаляйте встроенные роли без необходимости
Удаление ролей может привести к потере доступа у пользователей. Вместо удаления лучше пересмотреть права.
Храните изменения в собственном плагине или в functions.php темы
Так вы сможете легко управлять изменениями и переносить их при обновлениях.
Пример: как интегрировать изменения ролей с плагином Clearfy Pro
Плагин Clearfy Pro позволяет оптимизировать работу сайта и управлять правами пользователей. Вы можете использовать его для дополнительной настройки безопасности, а наш код — для тонкой кастомизации ролей.
Например, после добавления новых прав вы можете ограничить доступ к определенным функциям Clearfy Pro для роли content_manager так:
function wpexamples_limit_clearfy_access() {
if ( current_user_can( 'content_manager' ) ) {
// Ограничиваем доступ к настройкам Clearfy
remove_menu_page( 'clearfy-dashboard' );
}
}
add_action( 'admin_menu', 'wpexamples_limit_clearfy_access', 999 );Это универсальный пример, который можно адаптировать под ваши задачи.
Заключение
Изменение ролей пользователей в WordPress без плагинов — это мощный и гибкий способ настроить права доступа под конкретные задачи. Используя встроенные функции add_role, get_role, add_cap и remove_cap, вы получаете полный контроль над системой ролей. Такой подход повышает безопасность, упрощает поддержку и позволяет создавать индивидуальные решения под ваш проект.