wplearn.ru wordpress WP Learn

Как добавить дополнительные типы пользователей в WordPress с использованием capabilities

В стандартной установке WordPress предоставляет набор ролей пользователей, таких как Администратор, Редактор, Автор, Участник и Подписчик. Однако в реальных проектах часто возникает необходимость создавать кастомные роли с уникальными правами доступа для более гибкого контроля над сайтом. В этой статье подробно разберем, как добавить дополнительные типы пользователей (роли) в WordPress, используя систему capabilities, и приведем примеры кода для эффективной реализации.

Почему стоит создавать собственные роли пользователей в WordPress?

Стандартных ролей WordPress может быть недостаточно, если вы хотите разграничить доступ к определенным разделам админки, плагинам или функциям сайта. Например, если на сайте есть команда контент-менеджеров с разными обязанностями, или если нужно ограничить доступ к определенным настройкам без предоставления полного админского доступа.

Создание кастомных ролей позволяет:

  • Четко разграничить права пользователей;
  • Обеспечить безопасность, не давая лишних прав;
  • Упростить управление пользователями;
  • Настроить доступ к собственным плагинам и функционалу.

В основе ролей лежат capabilities — права на выполнение конкретных действий. Каждая роль — это набор таких capabilities.

Как добавить новую роль пользователя в WordPress: базовый пример

Для добавления новой роли используем функцию add_role(). Она принимает три параметра: имя роли, отображаемое название и массив capabilities.

function wplearn_add_custom_role() {
    add_role(
        'content_reviewer', // Идентификатор роли
        'Контент-ревьюер', // Название роли
        array(
            'read' => true, // право читать сайт
            'edit_posts' => true, // право редактировать свои записи
            'edit_others_posts' => false, // нет права редактировать чужие записи
            'publish_posts' => false, // нет права публиковать записи
            'delete_posts' => false, // нет права удалять записи
        )
    );
}
add_action('init', 'wplearn_add_custom_role');

Этот пример создаёт роль «Контент-ревьюер» с базовыми правами чтения и редактирования своих записей, без возможности изменять чужие.

Обратите внимание: добавлять роли нужно один раз при активации темы или плагина, а не при каждом визите пользователя. Для этого лучше использовать хук register_activation_hook в плагине или условие в functions.php.

Добавление и удаление capabilities для существующих ролей

Иногда нужно не создавать новую роль, а расширить существующую. Для этого применяются методы класса WP_Role:

$role = get_role('editor'); // получаем роль редактора
if ($role) {
    $role->add_cap('manage_options'); // добавляем capability
    $role->remove_cap('delete_others_posts'); // удаляем capability
}

В примере мы даём редактору права управлять опциями сайта — обычно это прерогатива администратора.

Практическое применение: роль «Модератор комментариев»

Создадим роль с возможностью просматривать, публиковать и удалять комментарии, но без доступа к редактору постов.

function wplearn_add_comment_moderator_role() {
    add_role('comment_moderator', 'Модератор комментариев', array(
        'read' => true,
        'edit_posts' => false,
        'moderate_comments' => true,
        'edit_others_posts' => false,
        'delete_comments' => true,
    ));
}
add_action('init', 'wplearn_add_comment_moderator_role');

Для работы с комментариями WordPress использует capability moderate_comments. Такая роль позволит пользователю модерировать комментарии без возможности изменять контент сайта.

Как проверить capabilities в коде и в шаблонах

Для условного отображения элементов интерфейса или выполнения функций нужно проверять capabilities пользователя. Для этого используйте метод current_user_can():

if (current_user_can('comment_moderator') && current_user_can('moderate_comments')) {
    echo '<p>Вы можете модерировать комментарии.</p>';
}

Это помогает создавать гибкие интерфейсы и защищать функционал от неавторизованного доступа.

Пример добавления роли с расширенными правами и настройка для плагина

Предположим, у вас установлен плагин WPCommunity (https://wpshop.ru/product/wpcommunity/?utm_source=wplearn.ru&utm_medium=article&utm_campaign=kak-dobavit-dopolnitelnye-tipy-polzovatelej-v-wordpress-s-primeniem-capabilities), который добавляет социальные функции на сайт. Создадим роль «Социальный менеджер» с правами управления плагином.

function wplearn_add_social_manager_role() {
    add_role('social_manager', 'Социальный менеджер', array(
        'read' => true,
        'edit_posts' => true,
        'manage_wpcommunity' => true, // предположим, что плагин проверяет эту capability
    ));
}
add_action('init', 'wplearn_add_social_manager_role');

Важно узнать, какие capabilities использует плагин — это обычно описано в документации или исходниках. Если capability кастомная, её нужно явно добавить и назначить нужным ролям.

Удаление кастомных ролей и очистка

Для удаления роли применяется функция remove_role():

function wplearn_remove_custom_roles() {
    remove_role('content_reviewer');
    remove_role('comment_moderator');
    remove_role('social_manager');
}
// Вызывать только при деактивации плагина или в ручном режиме
// register_deactivation_hook(__FILE__, 'wplearn_remove_custom_roles');

Не стоит удалять роли при каждом запуске сайта — это может привести к потере данных. Роли удаляют либо при деактивации плагина, либо при обновлении.

Советы по безопасности и отладке ролей

1. Тестируйте новые роли на тестовой среде, чтобы избежать потери доступа к сайту.
2. Используйте плагины, которые помогают управлять ролями и capabilities, например, Clearfy Pro — он упрощает работу с правами.
3. Для отладки полезен плагин Query Monitor — он позволяет видеть, какие capabilities проверяются.
4. Не давайте лишних прав ролям, минимизируйте возможности для повышения безопасности.

Выводы и рекомендации

Добавление кастомных ролей пользователей в WordPress — мощный инструмент для тонкой настройки безопасности и управления доступом. Используя функции add_role(), remove_role() и методы класса WP_Role, можно создавать уникальные роли с необходимым набором capabilities.

Обязательно документируйте созданные роли и права, тестируйте их и не забывайте очищать роли при удалении плагинов или изменений в архитектуре сайта.

×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙