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

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

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

Проверить наличие таких нежелательных регистраций можно через админку WordPress: «Пользователи» —> «Все пользователи» — в столбце email обратите внимание на домены, которые кажутся подозрительными или нежелательными.

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

WooCommerce по умолчанию не имеет встроенных ограничений по доменам email, поэтому для блокировки нужно добавить кастомный PHP-код в файл functions.php вашей дочерней темы или в отдельный плагин.

1. Создаем массив запрещенных доменов

function wps_block_email_domains_array() {
    return array(
        'tempmail.com',
        'mailinator.com',
        'disposablemail.com'
    );
}

2. Проверяем email при регистрации и блокируем

add_action('woocommerce_register_post', 'wps_restrict_registration_by_email_domain', 10, 3);
function wps_restrict_registration_by_email_domain($username, $email, $validation_errors) {
    $blocked_domains = wps_block_email_domains_array();
    $email_domain = substr(strrchr($email, '@'), 1);

    if (in_array(strtolower($email_domain), $blocked_domains)) {
        $validation_errors->add('registration_error', __('Регистрация с использованием данного домена email запрещена.', 'woocommerce'));
    }

    return $validation_errors;
}

3. Дополнительно: блокируем регистрацию через wp-login.php

Чтобы закрыть возможность регистрации через стандартную форму WordPress, добавьте фильтр registration_errors:

add_filter('registration_errors', 'wps_restrict_wp_registration_by_email_domain', 10, 3);
function wps_restrict_wp_registration_by_email_domain($errors, $sanitized_user_login, $user_email) {
    $blocked_domains = wps_block_email_domains_array();
    $email_domain = substr(strrchr($user_email, '@'), 1);

    if (in_array(strtolower($email_domain), $blocked_domains)) {
        $errors->add('registration_error', __('Регистрация с использованием данного домена email запрещена.'));
    }

    return $errors;
}

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

1. Попробуйте зарегистрироваться на сайте с email из списка запрещенных доменов (например, user@tempmail.com). Вы должны увидеть ошибку регистрации с сообщением «Регистрация с использованием данного домена email запрещена.»

2. Зарегистрируйтесь с корректным email — регистрация должна пройти успешно.

3. Проверьте журнал ошибок сервера (если есть) и логи WooCommerce, чтобы убедиться, что ошибок PHP не возникает.

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

  • Ошибка: Сообщение об ошибке регистрации не отображается.
    Причина: Не подключена функция woocommerce_register_post или конфликт с плагинами.
    Решение: Проверьте приоритет хука, отключите другие плагины для теста.
  • Ошибка: Пользователь может зарегистрироваться, несмотря на блок.
    Причина: Неверно получен домен email (например, с лишними пробелами или разным регистром).
    Решение: Добавьте trim() и strtolower() для нормализации email перед проверкой.
  • Ошибка: Блокировка не срабатывает при регистрации через сторонние формы.
    Причина: Внешние формы не используют стандартные хуки WooCommerce.
    Решение: Добавьте аналогичные проверки в обработчики этих форм или используйте серверную валидацию.

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

  • Регулярно обновляйте список запрещенных доменов — используйте базы временных почтовых сервисов.
  • Не храните список в базе данных, чтобы не нагружать запросы, используйте кеширование или константы.
  • Используйте фильтр sanitize_email() для очистки входящих email перед проверкой.
  • Для крупных магазинов с высокой нагрузкой рассмотрите использование специализированных плагинов, например Clearfy Pro, который также помогает управлять регистрациями и оптимизировать безопасность.

Сравнение решений: плагин vs. код vs. сторонние сервисы

РешениеПлюсыМинусы
Код в functions.phpПрямой контроль, бесплатно, быстроТребует навыков, сложно масштабировать
Плагин (например, WPBruiser, Stop Spammers)Удобство, поддержка, настройки UIНагрузка, конфликты, платные функции
Сторонние антиспам-сервисыВысокая точность, анализ поведенияСтоимость, зависимость от сервиса

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