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

В некоторых случаях владельцам сайтов на WordPress необходимо ограничить регистрацию новых пользователей по определённым доменам электронной почты. Например, если вы хотите закрыть регистрацию для корпоративных или временных почтовых ящиков, либо разрешить регистрацию только с доменов определённых компаний. В этой статье мы подробно рассмотрим, как запретить регистрацию на сайте WordPress по домену email с помощью кода и готовых решений.

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

Ограничение регистрации по домену помогает повысить безопасность сайта и контролировать аудиторию. Это особенно актуально для корпоративных порталов, intranet-сайтов, образовательных ресурсов и закрытых сообществ.

Например, если вы хотите, чтобы на вашем сайте регистрировались только сотрудники вашей компании с доменом @company.ru, нужно заблокировать регистрацию с любых других доменов. Или наоборот – запретить регистрацию с бесплатных почтовых сервисов типа @gmail.com или @yahoo.com.

Без такого ограничения на сайт может попасть нежелательная аудитория, спамеры или конкуренты.

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

WordPress предоставляет хук registration_errors, который позволяет проверять данные регистрации и возвращать ошибки, если что-то не соответствует правилам. Мы можем использовать этот хук, чтобы проверить домен email и запретить регистрацию при несоответствии.

Ниже пример функции, которая запрещает регистрацию с доменов, указанных в массиве $blocked_domains:

function wporg_block_registration_by_email_domain($errors, $sanitized_user_login, $user_email) {
    $blocked_domains = array('spamdomain.com', 'tempmail.net', 'blocked.ru'); // Список запрещённых доменов

    $email_domain = substr(strrchr($user_email, '@'), 1);

    if (in_array(strtolower($email_domain), $blocked_domains)) {
        $errors->add('domain_blocked', __('Регистрация с данного домена электронной почты запрещена.'));
    }

    return $errors;
}
add_filter('registration_errors', 'wporg_block_registration_by_email_domain', 10, 3);

В этом коде мы берём часть email после символа @ и проверяем, есть ли она в списке запрещённых доменов. Если да – добавляем ошибку, и регистрация не проходит.

Вы можете расширить список доменов или сделать проверку более сложной, например, использовать регулярные выражения.

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

Если нужно разрешать регистрацию только с конкретных доменов, достаточно поменять логику с запрета на разрешение:

function wporg_allow_registration_only_for_domains($errors, $sanitized_user_login, $user_email) {
    $allowed_domains = array('company.ru', 'partner.com'); // Разрешённые домены

    $email_domain = substr(strrchr($user_email, '@'), 1);

    if (!in_array(strtolower($email_domain), $allowed_domains)) {
        $errors->add('domain_not_allowed', __('Регистрация возможна только с корпоративных email.'));
    }

    return $errors;
}
add_filter('registration_errors', 'wporg_allow_registration_only_for_domains', 10, 3);

Этот вариант подходит для корпоративных сайтов с ограниченной аудиторией.

Примеры полезных плагинов для ограничения регистрации по email

Если не хотите писать код, можно использовать готовые плагины с похожей функциональностью:

  • WP Email Login Restriction – позволяет блокировать регистрацию по доменам и почтовым провайдерам.
  • Restrict Email Domains – простой плагин для разрешения регистрации только с указанных доменов.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wporg.ru&utm_medium=article&utm_campaign=kak-zapretit-registraciyu-na-sayte-wordpress-po-domenu) – многофункциональный оптимизатор и инструмент безопасности, в котором есть опция ограничения регистрации по доменам.

Преимущество плагинов в удобном интерфейсе и дополнительном функционале (логирование, уведомления, интеграции).

Как протестировать ограничение регистрации по домену

После добавления кода или установки плагина обязательно проверьте, что ограничения работают корректно:

  • Попробуйте зарегистрироваться с запрещённого домена – должно появиться сообщение об ошибке.
  • Попробуйте зарегистрироваться с разрешённого домена (если вы ограничиваете разрешённые) – регистрация должна пройти без ошибок.
  • Проверьте разные варианты написания доменов с большими и маленькими буквами, чтобы убедиться, что проверка нечувствительна к регистру.

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

Расширенные варианты: проверка по email и домену с внешними сервисами

Иногда бывает полезно дополнительно проверять email с помощью внешних API, например:

  • Проверка на временные почтовые сервисы (temp mail).
  • Валидация существования email через SMTP.
  • Интеграция с корпоративными LDAP/AD для авторизации.

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

Пример вызова внешнего API для проверки email на временность (упрощённый):

function wporg_check_temp_email_api($errors, $sanitized_user_login, $user_email) {
    $api_url = 'https://some-temp-email-checker.com/api?email=' . urlencode($user_email);
    $response = wp_remote_get($api_url);

    if (is_array($response) && !is_wp_error($response)) {
        $body = json_decode($response['body'], true);
        if ($body['is_temp']) {
            $errors->add('temp_email', __('Регистрация с временных email запрещена.'));
        }
    }

    return $errors;
}
add_filter('registration_errors', 'wporg_check_temp_email_api', 20, 3);

Обратите внимание, что вызов внешних сервисов может замедлить регистрацию, поэтому используйте кэширование и обработку ошибок.

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