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

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

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

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

Если вы замечаете большое количество регистраций с подозрительными доменами, например, @tempmail.com или @spamdomain.ru, и они приводят к спаму или фродовым заказам, — пора вводить ограничения на регистрацию. WooCommerce штатно не предоставляет гибкой фильтрации по доменам email, поэтому нужно добавить кастомный код.

Как проверить, с каких доменов приходят регистрации

  • Перейдите в панель WordPress > Пользователи.
  • Экспортируйте список пользователей в CSV (через плагин или вручную).
  • Отфильтруйте столбец email по доменным зонам.

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

Реализуем запрет на регистрацию в WooCommerce с помощью фильтра woocommerce_registration_errors. Код нужно добавить в файл functions.php дочерней темы или в функциональный плагин.

add_filter('woocommerce_registration_errors', 'wporg_restrict_registration_by_email_domain', 10, 3);
function wporg_restrict_registration_by_email_domain($errors, $username, $email) {
    // Список запрещенных доменов
    $blocked_domains = array('tempmail.com', 'spamdomain.ru', 'example.com');
    
    $email_domain = strtolower(substr(strrchr($email, '@'), 1));
    
    if(in_array($email_domain, $blocked_domains)) {
        $errors->add('registration_error', __('Регистрация с этого домена email запрещена.', 'woocommerce'));
    }
    
    return $errors;
}

В этом коде:

  • Собирается домен из email, введенного при регистрации.
  • Проверяется, есть ли он в списке запрещенных.
  • Если да — возвращается ошибка, которая отображается пользователю.

Расширение: добавление динамического списка запрещенных доменов через админку

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

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

Чтобы убедиться, что запрет работает, выполните следующие шаги:

  1. Перейдите на страницу регистрации WooCommerce.
  2. Попробуйте зарегистрироваться, используя email с запрещенным доменом.
  3. Убедитесь, что выводится сообщение об ошибке и регистрация не завершается.
  4. Повторите с email с разрешенным доменом — регистрация должна пройти успешно.

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

  • Ошибка: регистрация пропускается, несмотря на запрещенный домен.
    Причина: фильтр woocommerce_registration_errors не срабатывает, потому что используется кастомная форма регистрации. Решение: убедитесь, что форма использует стандартный процесс WooCommerce или добавьте проверку email в обработчик вашей кастомной формы.
  • Ошибка: сообщение об ошибке не отображается.
    Причина: тема или плагин не выводит ошибки WooCommerce на странице регистрации. Решение: проверьте шаблон регистрации и убедитесь, что там вызывается wc_print_notices().
  • Ошибка: чувствительность к регистру домена.
    Причина: домен сравнивается без приведения к нижнему регистру. Решение: используйте strtolower() для домена перед сравнением, как в примере.

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

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

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

МетодПлюсыМинусыПример
Код в functions.phpБыстро, без плагинов, гибкоТребует навыков, поддержка списка вручнуюПример в статье выше
Плагин для ограничения регистрацииУдобный интерфейс, поддержкаМожет быть избыточным, нагрузкаWP Cerber, Restrict Email Domains
Сторонние сервисы антиспамАвтоматическая фильтрация, APIПлатные, задержки, сложность интеграцииCleanTalk, Akismet

Скачать WP с оф. сайта Магазин проверенных платных тем