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

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

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

Без такой настройки возможны спам-регистрации, фейковые аккаунты или просто нежелательные пользователи.

Пошаговое решение: как запретить регистрацию по определённым доменам email

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

WooCommerce использует стандартный WordPress хук woocommerce_registration_errors, который позволяет проверять данные формы регистрации и добавлять ошибки.

Ниже пример кода, который запрещает регистрацию с почтовых адресов не из разрешённого списка доменов:

add_filter('woocommerce_registration_errors', 'restrict_registration_by_email_domain', 10, 3);
function restrict_registration_by_email_domain($validation_error, $username, $email) {
    // Список разрешённых доменов
    $allowed_domains = array('company.com', 'partner.org');
    
    $email_domain = substr(strrchr($email, '@'), 1);
    
    if (!in_array(strtolower($email_domain), $allowed_domains)) {
        $validation_error->add( 'email_domain_error', __('Регистрация с вашего домена электронной почты запрещена.', 'woocommerce') );
    }
    return $validation_error;
}

2. Как добавить разрешённые домены без редактирования кода (альтернативный способ)

Если хотите управлять списком доменов из админки, добавьте опцию в wp_options и измените функцию, чтобы она читала список из настроек. Но для простоты лучше держать список в коде.

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

  • Попробуйте зарегистрироваться на сайте с почтой, домен которой не входит в список (например, gmail.com) — регистрация должна быть заблокирована с сообщением об ошибке.
  • Зарегистрируйтесь с почтой с разрешённым доменом (например, company.com) — регистрация должна пройти успешно.
  • Проверьте, что в админке WooCommerce > Пользователи появились только пользователи с разрешёнными доменами.

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

  • Ошибка: Регистрация блокируется для разрешённых доменов. Проверьте регистр домена, функция strtolower() используется для снижения регистра, но если в списке домены с ошибками, исправьте их.
  • Ошибка: Пользователь не видит сообщение об ошибке. Убедитесь, что тема поддерживает вывод woocommerce_registration_errors и не перезаписывает его.
  • Ошибка: Фильтр не срабатывает. Проверьте, что код добавлен в functions.php активной темы или в плагин, и что нет конфликтов с другими плагинами, которые могут менять регистрацию.

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

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

Сравнение способов реализации ограничения доменов email

СпособПлюсыМинусыПример
Хардкод в functions.php Простота и скорость реализации, не требует дополнительного плагина Сложно масштабировать, изменения требуют редактирования кода Пример из статьи выше
Через плагин с настройками Удобство управления через админку, гибкость Плагин может замедлять сайт, требует установки и поддержки Плагины типа "Restrict Email Domains" (проверить совместимость с WooCommerce)
Комбинация кода + капча Максимальная защита от спама и нежелательных регистраций Усложнение регистрации для пользователей Код из статьи + Google reCAPTCHA
WooCommerce: как автоматически удалять товары со статусом "Отменен"
27.06.2026
WooCommerce: как автоматически изменять стоимость товара при изменении атрибутов
04.07.2026
Как использовать nestable menu в WordPress: практическое руководство с примерами кода
09.12.2025
Как избежать конфликтов между плагинами WordPress: практическое руководство
03.04.2026
Как отключить автоматические обновления в WordPress
06.03.2026