Почему нужно ограничивать регистрацию по домену 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 и добавлять интерфейс в админке, но это тема для отдельной статьи. В базовом варианте достаточно хардкодить массив.
Проверка результата после внедрения
Чтобы убедиться, что запрет работает, выполните следующие шаги:
- Перейдите на страницу регистрации WooCommerce.
- Попробуйте зарегистрироваться, используя email с запрещенным доменом.
- Убедитесь, что выводится сообщение об ошибке и регистрация не завершается.
- Повторите с email с разрешенным доменом — регистрация должна пройти успешно.
Частые ошибки при реализации и как их исправить
- Ошибка: регистрация пропускается, несмотря на запрещенный домен.
Причина: фильтрwoocommerce_registration_errorsне срабатывает, потому что используется кастомная форма регистрации. Решение: убедитесь, что форма использует стандартный процесс WooCommerce или добавьте проверку email в обработчик вашей кастомной формы. - Ошибка: сообщение об ошибке не отображается.
Причина: тема или плагин не выводит ошибки WooCommerce на странице регистрации. Решение: проверьте шаблон регистрации и убедитесь, что там вызываетсяwc_print_notices(). - Ошибка: чувствительность к регистру домена.
Причина: домен сравнивается без приведения к нижнему регистру. Решение: используйтеstrtolower()для домена перед сравнением, как в примере.
Практические советы по безопасности и производительности
- Не храните список запрещенных доменов в базе в открытом виде, если реализуете админку — используйте сериализацию и проверку прав доступа.
- Чтобы не замедлять регистрацию, избегайте сложных проверок и обращений к внешним сервисам.
- Дополнительно можно добавить проверку на временные email-сервисы через API, но это усложняет решение.
Сравнение вариантов реализации запрета регистрации по домену email
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Код в functions.php | Быстро, без плагинов, гибко | Требует навыков, поддержка списка вручную | Пример в статье выше |
| Плагин для ограничения регистрации | Удобный интерфейс, поддержка | Может быть избыточным, нагрузка | WP Cerber, Restrict Email Domains |
| Сторонние сервисы антиспам | Автоматическая фильтрация, API | Платные, задержки, сложность интеграции | CleanTalk, Akismet |