В WordPress по умолчанию есть набор стандартных ролей пользователей: Администратор, Редактор, Автор, Участник и Подписчик. Но часто возникает необходимость создавать собственные роли с уникальными правами, чтобы ограничить или расширить возможности пользователей. В этой статье мы подробно рассмотрим, как создать пользовательские роли и назначить им права без использования сторонних плагинов.
Почему стоит создавать роли и права вручную?
Использование плагинов для управления ролями и правами, таких как Clearfy Pro, удобно, но не всегда оправдано. Во-первых, это дополнительная нагрузка на сайт, во-вторых, иногда нужно тонко контролировать логику доступа, что проще сделать на уровне кода. Такой подход повышает гибкость и безопасность.
Далее мы рассмотрим, как программно добавить новую роль с набором прав и как модифицировать существующие роли.
Добавление пользовательской роли в WordPress
Для создания роли используется функция add_role(). Она принимает три параметра: уникальный идентификатор роли, читаемое имя и массив прав (capabilities).
function wpbegin_add_custom_role() {
add_role(
'custom_manager', // Уникальный ID роли
'Менеджер контента', // Название роли
array(
'read' => true, // может читать сайт
'edit_posts' => true, // может редактировать записи
'delete_posts' => false, // не может удалять записи
'publish_posts' => true, // может публиковать записи
'upload_files' => true, // может загружать файлы
)
);
}
add_action('init', 'wpbegin_add_custom_role');
Важно: функцию добавления роли нужно запускать один раз, например, при активации темы или плагина, чтобы не создавать дубли. Для этого можно использовать хук after_switch_theme или написать отдельный скрипт.
Удаление роли
Если нужно удалить роль, используется функция remove_role():
function wpbegin_remove_custom_role() {
remove_role('custom_manager');
}
// Запускать при необходимости, например, при деактивации темы/плагина
Изменение прав существующих ролей
Чтобы добавить или убрать права у существующей роли, необходимо получить объект роли с помощью get_role() и использовать методы add_cap() и remove_cap().
function wpbegin_modify_editor_role() {
$role = get_role('editor');
if ($role) {
// Добавим право удалять опубликованные записи
$role->add_cap('delete_published_posts');
// Уберём право публиковать страницы
$role->remove_cap('publish_pages');
}
}
add_action('init', 'wpbegin_modify_editor_role');
Такой подход позволяет гибко настраивать права без установки дополнительных плагинов.
Примеры полезных кастомных ролей
Рассмотрим несколько примеров ролей, которые могут пригодиться на практике:
- Менеджер комментариев: может читать и модератировать комментарии, но не имеет доступа к созданию или редактированию записей.
- Контент-менеджер: может создавать, редактировать и публиковать записи, но не имеет доступа к настройкам сайта.
- SEO-специалист: имеет доступ к редактированию метаданных и SEO-плагинов, но не может менять контент.
Для реализации таких ролей достаточно определить соответствующие права. Например, для менеджера комментариев можно использовать:
add_role('comment_manager', 'Менеджер комментариев', array(
'read' => true,
'edit_posts' => false,
'moderate_comments' => true,
));
Как проверить права пользователя в шаблонах и плагинах
Чтобы условно показывать интерфейс или функционал, в шаблонах используют функцию current_user_can(). Она проверяет, обладает ли текущий пользователь указанным правом.
if (current_user_can('publish_posts')) {
echo 'Вы можете публиковать записи';
} else {
echo 'У вас нет прав на публикацию';
}
Это позволяет создавать гибкие интерфейсы, которые подстраиваются под роль пользователя.
Интеграция с плагинами WPShop
Если вы используете плагины от WPShop, например, WPRemark для отзывов, можно ограничить доступ к настройкам плагина только определённым ролям. Для этого достаточно добавить в код проверку в админке:
function wpbegin_restrict_wpremark_access() {
if (!current_user_can('manage_options')) { // или ваша кастомная роль
wp_die('Доступ запрещён');
}
}
add_action('admin_init', 'wpbegin_restrict_wpremark_access');
Такой подход гарантирует, что только назначенные пользователи смогут управлять важными настройками.
Советы по безопасности и оптимизации
При создании и изменении ролей важно следить, чтобы не дать слишком широкие права, особенно связанные с изменением настроек, удалением пользователей и доступом к файлам. Минимизируйте права до необходимого минимума.
Также рекомендуется после внесения изменений проверить работу сайта с разных аккаунтов и протестировать все сценарии использования.
Если нужно массово управлять ролями через интерфейс, можно использовать плагин Clearfy Pro, но для уникальных и нестандартных задач ручное кодирование часто предпочтительнее.