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

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

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

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

Ограничение регистрации по домену позволяет:

  • Сократить количество спам-аккаунтов;
  • Обеспечить регистрацию пользователей только с разрешённых доменов;
  • Упростить модерацию новых аккаунтов;
  • Повысить безопасность и контроль над сайтом.

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

Самый простой способ — добавить проверку при регистрации пользователя, которая будет блокировать регистрацию, если email содержит запрещённый домен. Для этого используем хук registration_errors, где можем выполнить валидацию.

Пример функции wporg_zapret_email_domain_registration:

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

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

    if (in_array(strtolower($email_domain), $blocked_domains)) {
        $errors->add('domain_blocked', __('Регистрация с данного домена email запрещена.'));
    }
    return $errors;
}
add_filter('registration_errors', 'wporg_zapret_email_domain_registration', 10, 3);

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

Как расширить проверку: использование масок и поддоменов

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

function wporg_zapret_email_domain_registration_regex( $errors, $sanitized_user_login, $user_email ) {
    $blocked_patterns = array('/^.*@spamdomain\.com$/i', '/^.*@.*\.badmail\.ru$/i');
    foreach ($blocked_patterns as $pattern) {
        if (preg_match($pattern, $user_email)) {
            $errors->add('domain_blocked', __('Регистрация с данного домена email запрещена.'));
            break;
        }
    }
    return $errors;
}
add_filter('registration_errors', 'wporg_zapret_email_domain_registration_regex', 10, 3);

Так вы можете заблокировать, например, все поддомены badmail.ru и основной домен spamdomain.com.

Использование плагинов для ограничения регистрации по email-доменам

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

  • Restrict Email Domains: позволяет указать список разрешённых доменов — регистрация с остальных будет запрещена. Удобно для закрытых сообществ.
  • WP Email Restrictions: простой плагин с возможностью как блокировки, так и разрешения определённых доменов.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wporgru&utm_medium=article&utm_campaign=kak-zapretit-registraciyu-po-domenu-email-v-wordpress-s-podrobnym-rukovodstvom) — многофункциональный плагин для оптимизации и безопасности, в том числе включает возможности управления регистрацией и ограничениями по email.

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

Как сделать индивидуальное сообщение об ошибке и логирование попыток

При блокировке регистрации полезно не только показать пользователю понятное сообщение, но и записать попытку в лог для администраторов. Добавим расширенный пример:

function wporg_zapret_email_domain_registration_advanced( $errors, $sanitized_user_login, $user_email ) {
    $blocked_domains = array('spamdomain.com', 'badmail.ru');
    $email_domain = substr(strrchr($user_email, '@'), 1);

    if (in_array(strtolower($email_domain), $blocked_domains)) {
        $message = sprintf('Попытка регистрации запрещена: домен %s заблокирован', $email_domain);
        error_log($message); // Запись в лог ошибок сервера
        $errors->add('domain_blocked', __('Регистрация с домена вашего email запрещена. Если это ошибка, свяжитесь с администрацией сайта.'));
    }
    return $errors;
}
add_filter('registration_errors', 'wporg_zapret_email_domain_registration_advanced', 10, 3);

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

Советы по поддержке и расширению функционала

При внедрении ограничения по email доменам учтите:

  • Обновляйте список запрещённых доменов — со временем спамеры меняют адреса, поэтому список нужно поддерживать.
  • Учитывайте международные домены и возможные вариации написания домена с похожими символами.
  • Тестируйте регистрацию после добавления кода или плагина, чтобы избежать блокировки легитимных пользователей.
  • Если сайт мультисайтовый, настройте ограничения для каждой подсайта отдельно, если нужно.

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

Итог

Ограничение регистрации по домену email — важный инструмент контроля и безопасности WordPress-сайта. Вы можете реализовать его через простой код в файле functions.php или выбрать готовый плагин, например, Clearfy Pro. Главное — регулярно обновлять список запрещённых доменов и следить за поведением новых пользователей.

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