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

В чем суть задачи: ограничение доступа к товарам для неавторизованных пользователей

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

Диагностика проблемы: как понять, что товары доступны всем

Если вы заметили, что ваш магазин показывает цены или позволяет добавлять товары в корзину гостям, хотя этого не должно быть, первым делом убедитесь, что не используется сторонних плагинов, ограничивающих доступ. Проверьте следующие моменты:

  • На страницах товаров и каталога доступен полный список товаров без ограничений.
  • Гости могут видеть цены и кнопки «Добавить в корзину».
  • Нет настроек в теме или плагинах, ограничивающих видимость.

Для проверки откройте магазин в режиме инкогнито и сравните с отображением авторизованного пользователя.

Решение: ограничение доступа к товарам через функции темы

Самый простой способ — добавить фильтр, который проверяет авторизацию пользователя и при отсутствии доступа перенаправляет на страницу входа или показывает сообщение.

Шаг 1. Скрыть товары в каталоге для гостей

Добавим фильтр к запросу WooCommerce, который исключит товары для гостей:

add_action('pre_get_posts', function($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if (is_shop() || is_product_category() || is_product_tag()) {
        if (!is_user_logged_in()) {
            $query->set('post__in', array(0)); // Пустой массив для исключения товаров
        }
    }
});

Шаг 2. Перенаправление при попытке открыть страницу товара гостем

Чтобы предотвратить просмотр отдельной страницы товара, добавим проверку в шаблон single-product:

add_action('template_redirect', function() {
    if (is_product() && !is_user_logged_in()) {
        wp_redirect(wp_login_url(get_permalink()));
        exit;
    }
});

Шаг 3. Скрыть цены и кнопку «Добавить в корзину»

Даже если страница доступна, можно скрыть цены и отключить возможность покупки:

add_filter('woocommerce_get_price_html', function($price) {
    if (!is_user_logged_in()) {
        return '<span>Требуется авторизация для просмотра цены</span>';
    }
    return $price;
});

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);

Проверка результата

  • Откройте магазин в режиме инкогнито: на странице каталога не должно отображаться товаров.
  • Попытка открыть любой товар должна привести на страницу входа.
  • После авторизации товары, цены и кнопки должны отображаться как обычно.

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

  • Проблема: товары все равно видны гостям.
    Причина: фильтр pre_get_posts не срабатывает из-за приоритетов или конфликтов с другими плагинами.
    Решение: убедитесь, что добавляете код в файл functions.php дочерней темы или в плагин, и что нет конфликтов.
  • Проблема: после перенаправления возникает цикл.
    Причина: некорректная проверка условий в template_redirect.
    Решение: добавить проверку, что текущий URL не является страницей логина или выхода.
  • Проблема: цена и кнопка остались видимыми.
    Причина: удаление кнопки происходит только на странице товара, но не в других местах.
    Решение: добавьте дополнительные фильтры для вывода цены и кнопок в виджетах и архивах.

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

  • Не используйте для ограничения доступа плагины с плохими отзывами или без обновлений, чтобы не подвергать сайт риску.
  • Кэширование страниц может мешать динамическому ограничению доступа — настраивайте исключения для страниц магазина.
  • Если требуется массовое ограничение доступа, рассмотрите использование специализированных плагинов, например, «Members» или «Restrict Content Pro», но с пониманием, что они добавляют нагрузку.

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

СпособПреимуществаНедостатки
Собственный код в functions.phpЛегко кастомизировать, бесплатно, быстроТребует навыков, может конфликтовать с плагинами
Плагины (Members, Restrict Content Pro)Готовые функции, удобный интерфейс, поддержка ролейДополнительная нагрузка, возможна плата за функционал
Комбинированный подходМаксимальная гибкость и масштабируемостьСложнее в поддержке
Как настроить отзывы в WordPress с оценками и модерацией
18.02.2026
WooCommerce: как автоматически удалять старые неоплаченные заказы по срокам
09.07.2026
WooCommerce: автоматическое отключение платежных систем при неоплате заказа
29.04.2026
Как создать динамические таблицы в WordPress с помощью shortcode
28.01.2026
Как создать динамическую почтовую рассылку в WordPress
21.03.2026