В WordPress стандартная система ролей и прав доступа часто бывает недостаточно гибкой для сложных проектов. Часто возникает задача создать группы пользователей с определёнными правами, чтобы ограничить доступ к определённому контенту — например, приватные разделы сайта, материалы для подписчиков или разные уровни доступа в образовательных проектах.
Почему стандартные роли WordPress не всегда подходят
WordPress по умолчанию предлагает пять основных ролей: подписчик, участник, автор, редактор и администратор. Каждая роль имеет фиксированный набор возможностей, и изменить их можно через код или плагины. Но если нужно, например, создать несколько групп подписчиков с разным доступом, стандартные роли не помогут.
Для решения этой задачи удобно использовать плагины, которые позволяют создавать собственные роли и группы, а также гибко управлять доступом к контенту, включая посты, страницы, категории и даже отдельные блоки на страницах.
Плагины для создания групп пользователей и ограничения доступа
1. Groups — бесплатный и мощный плагин
Плагин Groups позволяет создавать неограниченное число групп пользователей, управлять правами на содержимое и интегрируется с другими плагинами.
- Создание и управление группами через админку;
- Привязка пользователей к нескольким группам;
- Ограничение доступа к записям и страницам через короткие коды и фильтры;
- Поддержка REST API.
Пример ограничения доступа к записи для группы "premium_members" с помощью Groups
[groups_member group="premium_members"]Только для премиум-подписчиков этот контент виден.[/groups_member]2. MemberPress — комплексное решение для платных подписок
Если сайт монетизируется и нужна интеграция с платежными системами, MemberPress — один из лучших плагинов для создания платных уровней доступа и групп.
Плагин позволяет создавать правила доступа, автоматизировать подписки и интегрироваться с WooCommerce, LearnDash и другими.
3. User Role Editor — расширенное управление ролями
Этот плагин помогает тонко настраивать права существующих ролей, создавать новые роли и назначать возможности. Однако он не создаёт группы как таковые, а работает с ролями.
Как создать свои группы пользователей в коде WordPress
Если вы хотите обойтись без плагинов, создайте кастомные роли и управляйте доступом с помощью хуков. Ниже пример функции, которая создаёт роль «wpmentor_premium_member» с ограниченными правами.
function wpmentor_add_custom_roles() {
add_role('wpmentor_premium_member', 'Премиум участник', array(
'read' => true,
'edit_posts' => false,
'delete_posts' => false,
));
}
add_action('init', 'wpmentor_add_custom_roles');Далее можно использовать фильтр template_redirect, чтобы проверить роль пользователя и скрыть страницы для неподходящих групп.
function wpmentor_restrict_content_by_role() {
if (is_page('premium-content') && !current_user_can('wpmentor_premium_member')) {
wp_redirect(home_url('/')); // перенаправляем на главную
exit;
}
}
add_action('template_redirect', 'wpmentor_restrict_content_by_role');Использование мета-полей и таксономий для расширенного контроля доступа
Иногда одной роли недостаточно — нужно разграничить доступ внутри одной группы. Для этого удобно использовать мета-поля пользователей и таксономии в записях.
Например, можно добавить мета-поле «region» к пользователю и ограничивать доступ к контенту по этому признаку. Или использовать кастомную таксономию «доступ» для записей и сверять с мета-полями.
Пример проверки мета-поля пользователя:
function wpmentor_check_user_region_access() {
$user_id = get_current_user_id();
$user_region = get_user_meta($user_id, 'region', true);
$post_region = get_post_meta(get_the_ID(), 'region', true);
if ($post_region && $user_region !== $post_region) {
wp_die('У вас нет доступа к этому контенту.');
}
}
add_action('template_redirect', 'wpmentor_check_user_region_access');Интеграция с плагинами WPShop для расширенных возможностей
Если вы используете продукты из WPShop, например, WPRemark для отзывов или My Popup для всплывающих окон, можно дополнительно сегментировать пользователей по группам и показывать им персонализированный контент.
Например, показывать всплывающие окна с предложениями только для определённой группы пользователей, используя условные проверки в коде.
if (current_user_can('wpmentor_premium_member')) {
echo do_shortcode('[my_popup id="123"]');
}Заключение по теме групп пользователей в WordPress
Создание групп пользователей и гибкое управление доступом — важная задача для многих сайтов на WordPress. Использование плагинов типа Groups или MemberPress значительно упрощает процесс, а кастомный код позволяет реализовать индивидуальные сценарии.
Обязательно тестируйте все настройки на тестовом сайте, чтобы избежать проблем с доступом реальных пользователей. Комбинируйте роли, мета-поля и таксономии для достижения нужной гранулярности контроля.