WooCommerce: как запретить покупку товара для неавторизованных пользователей

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

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

  • Можно ли оформить заказ без регистрации (попробуйте оформить заказ в режиме инкогнито);
  • Нужна ли вам строгая идентификация клиентов;
  • Планируется ли предоставление специальных условий только для авторизованных пользователей.

Пошаговое решение: запрет оформления заказа для гостей

1. Отключение оформления заказа для неавторизованных

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

2. Добавление кода в functions.php или собственный плагин

Добавьте следующий код в файл functions.php активной темы или в кастомный плагин:

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

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

3. Вывод сообщения на странице товара и корзины

Чтобы пользователь сразу понял, что нужно войти, добавьте уведомления на странице товара и корзины:

add_action('woocommerce_before_add_to_cart_form', 'wc_notice_login_required');
add_action('woocommerce_before_cart', 'wc_notice_login_required');
function wc_notice_login_required() {
    if (!is_user_logged_in()) {
        wc_print_notice('Пожалуйста, <a href="' . wp_login_url(get_permalink()) . '">войдите</a> или <a href="' . wp_registration_url() . '">зарегистрируйтесь</a>, чтобы купить этот товар.', 'notice');
    }
}

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

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

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

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

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

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

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

МетодПлюсыМинусы
Код в functions.phpБесплатно, быстро, легко настроитьТребует знаний PHP, может сломаться при смене темы
Плагин для ограничения доступаУдобный интерфейс, дополнительные функции, поддержкаНагрузка на сайт, возможность конфликтов
Изменение шаблонов темыГибкая кастомизацияСложно, требует поддержки при обновлениях
Как сделать автоматический импорт контента в WordPress из разных источников
13.02.2026
Как удалить корзину WooCommerce из меню без плагинов
29.04.2026
WordPress: как создать собственный виджет с примером кода
27.11.2025
WooCommerce: запрет покупки товара для неавторизованных пользователей
13.05.2026
WooCommerce: как установить ограничение на количество товаров в корзине
20.05.2026