В WordPress по умолчанию есть предопределённые роли пользователей: администратор, редактор, автор, подписчик и т.д. Но иногда стандартных ролей недостаточно, особенно если нужно добавить пользователей с уникальными правами и функционалом. В этой статье мы подробно рассмотрим, как создать собственный тип пользователя (роль) в WordPress с помощью хуков, а также как добавить нужные capabilities и использовать этот тип в коде.
Что такое пользовательские роли и зачем они нужны
Роль пользователя определяет набор прав (capabilities), которые позволяют выполнять определённые действия в админке и на сайте. Создавая собственные роли, вы можете гибко контролировать доступ и функционал для разных групп пользователей. Это особенно полезно на крупных сайтах, маркетплейсах, образовательных порталах и других проектах, где нужны кастомные сценарии.
Например, вы можете создать роль «Куратор», которая сможет редактировать только определённые записи, или «Менеджер заказов» с ограниченным доступом к WooCommerce.
Как создать новую роль пользователя в WordPress через хуки
Для создания роли используется функция add_role(). Лучшее место для её вызова — хук after_setup_theme или активация плагина. Ниже пример функции для создания роли с набором возможностей:
function wpassist_add_custom_role() {
add_role('wpassist_manager', 'Менеджер WPAssist', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
'publish_posts' => true,
'upload_files' => true,
// Добавьте другие capabilities по необходимости
));
}
add_action('after_setup_theme', 'wpassist_add_custom_role');
Эта функция создаст роль «Менеджер WPAssist» с определёнными правами. Если роль уже существует, функция её не изменит — можно добавить проверку или использовать отдельный скрипт для обновления.
Какие capabilities можно использовать
Вот несколько часто используемых capabilities:
read— право читать сайт;edit_posts— редактировать свои записи;edit_others_posts— редактировать чужие записи;publish_posts— публиковать записи;delete_posts— удалять свои записи;upload_files— загружать файлы;manage_options— управлять настройками сайта (очень мощное право);- и многие другие.
Полный список можно найти в официальной документации WordPress.
Как добавить или изменить capabilities у существующей роли
Для изменения прав уже созданной роли используется функция get_role() и методы добавления или удаления возможностей:
function wpassist_modify_role_caps() {
$role = get_role('wpassist_manager');
if ($role) {
$role->add_cap('edit_others_posts');
$role->remove_cap('delete_posts');
}
}
add_action('init', 'wpassist_modify_role_caps');
В этом примере мы добавляем возможность редактировать чужие записи и убираем удаление своих.
Как использовать новую роль в проверках и условных конструкциях
После создания роли вы можете проверять пользователя по ролям и capabilities:
if (current_user_can('wpassist_manager')) {
// Выполнить код для менеджера
}
// Или проверить capability
if (current_user_can('edit_others_posts')) {
// Доступно редактирование чужих записей
}
Это удобно для ограничения доступа к определённым функциям или меню.
Добавление пользовательского типа пользователя с помощью плагина WPUserRoleEditor
Если хотите управлять ролями через UI, можно использовать плагин WPUserRoleEditor. Он позволяет создавать, редактировать роли и capabilities без кода, что удобно для администраторов.
Практические советы и частые ошибки
- Не создавайте роли с правами администратора без нужды — это опасно.
- При тестировании пользуйтесь отдельной учётной записью с новой ролью.
- Если роль не применяется, проверьте, не кешируются ли capabilities (попробуйте сбросить кэш плагинов).
- Для сложных сценариев можно создавать кастомные таблицы пользователей или метаданные, но это уже продвинутая тема.
Заключение
Создание собственных ролей пользователей в WordPress — мощный инструмент для настройки прав доступа. Используя хуки и функции WordPress, вы легко можете добавить новые роли, настроить capabilities и интегрировать их в бизнес-логику сайта. Это позволит сделать ваш проект более гибким и безопасным.