WooCommerce: как настроить правила разграничения доступа к страницам и категориям товаров

Диагностика задачи: зачем ограничивать доступ к товарам и страницам WooCommerce

В интернет-магазинах на WooCommerce часто возникает необходимость скрыть отдельные страницы, категории или товары от определённых групп пользователей. Например, показывать эксклюзивные товары только зарегистрированным клиентам, или ограничить доступ к оптовым ценам для обычных посетителей.

Стандартного функционала WooCommerce для тонкой настройки доступа нет. Без дополнительных настроек или плагинов пользователи видят весь каталог и страницы магазина.

В этой статье разберём, как точечно ограничить доступ к категориям и страницам WooCommerce с помощью кода, сохранив при этом производительность и безопасность.

Как определить, что доступ к категории или странице не ограничен

  • Перейдите на страницу категории товаров в режиме неавторизованного пользователя или пользователя с низкими правами.
  • Проверьте, виден ли каталог и товары.
  • Если защищаемая категория или страница доступна, значит ограничения нет.
  • Для страниц магазина и ключевых страниц WooCommerce (корзина, оформление заказа) также проверьте доступ.

Пошаговое решение: ограничение доступа к категориям WooCommerce и страницам

1. Добавляем проверку в шаблон каталога и страниц

Для ограничения доступа к категориям можно использовать хук template_redirect, который срабатывает перед загрузкой шаблона. В функции проверим категорию и роль пользователя.

add_action('template_redirect', function() {
    if (is_product_category('optovye-tovary')) { // замените на вашу категорию
        if (!is_user_logged_in() || !current_user_can('customer')) {
            wp_redirect(home_url());
            exit;
        }
    }
    if (is_page('eksklyuzivnye-tovary')) { // замена на slug страницы
        if (!is_user_logged_in() || !current_user_can('customer')) {
            wp_redirect(wp_login_url(get_permalink()));
            exit;
        }
    }
});

Этот код проверит, если пользователь не авторизован или не имеет права customer (роль покупателя), то его перенаправит на главную или страницу входа.

2. Скрываем товары из категорий для неподходящих пользователей

Чтобы товары из ограниченной категории не показывались в других местах (виджеты, поиск), фильтруем запросы WP_Query через хук pre_get_posts:

add_action('pre_get_posts', function($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if (!is_user_logged_in() || !current_user_can('customer')) {
        // Исключаем категорию optovye-tovary из запросов на фронте
        $tax_query = (array) $query->get('tax_query');
        $tax_query[] = [
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => ['optovye-tovary'],
            'operator' => 'NOT IN',
        ];
        $query->set('tax_query', $tax_query);
    }
});

Проверка результата после внедрения

  • Выйдите из аккаунта и попробуйте перейти к защищённой категории и странице — должна быть переадресация.
  • Зайти под учетной записью с ролью customer — доступ должен быть.
  • Проверьте поиск и виджеты — товары из запрещенной категории не должны отображаться.
  • Проверьте консоль браузера — ошибок JavaScript быть не должно.

Частые ошибки и как исправить

  • Переадресация не срабатывает: проверьте, что код добавлен в functions.php или подключен через плагин, и что нет конфликтов плагинов с редиректами.
  • Товары всё равно отображаются в виджетах: убедитесь, что условие для исключения категорий в pre_get_posts правильно настроено и срабатывает только на фронтенде.
  • Пользователи с нужной ролью не видят товары: проверьте, что роль указана верно и пользователь действительно ей обладает.
  • Проблемы с SEO из-за переадресаций: используйте редиректы с кодом 302 для временного ограничения, чтобы не потерять индексацию.

Практические советы по безопасности и производительности

  • Не используйте плагины с избыточным функционалом, если задача проста — код легче поддерживать и быстро работает.
  • Кэширование страниц может мешать проверке доступа — отключите кэш для страниц с ограниченным доступом или настройте исключения.
  • Для более гибких правил доступа рассмотрите использование ролей и capabilities, а также пользовательских мета-полей.
  • Регулярно проверяйте логи ошибок, чтобы быстро находить сбои в редиректах и доступе.
  • Протестируйте работу на мобильных устройствах и разных браузерах — чтобы исключить проблемы с кэшированием и редиректами.

Сравнение вариантов реализации ограничения доступа

МетодОписаниеПлюсыМинусы
Код в functions.phpДобавление условий в хуки template_redirect и pre_get_postsЛегко кастомизируется, нет лишних плагинов, быстро работаетТребует знаний PHP, сложно для новичков
Плагины ограничения доступаИспользование плагинов типа Members, User Role EditorУдобный интерфейс, много функцийМожет нагружать сайт, конфликтовать с другими плагинами
КомбинированиеПлагины для ролей + кастомный код для тонкой настройкиГибкость и удобство настройкиСложнее поддерживать, возможны конфликты
WooCommerce: как полностью отключить отмену заказов через личный кабинет
11.05.2026
WooCommerce: как полностью отключить отмену заказов через личный кабинет
21.05.2026
Как создать собственный шорткод в WordPress
23.11.2025
WooCommerce: как создать кастомный экспорт товаров в CSV без плагинов
15.05.2026
WooCommerce: как отключить автоматическое обновление статуса заказов
04.06.2026