В этой статье подробно разберём, как запретить регистрацию пользователей в 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. Главное — регулярно обновлять список запрещённых доменов и следить за поведением новых пользователей.