Ограничение регистрации пользователей по определённым email-доменам — распространённая задача для администратора сайта на WordPress, особенно если нужно защитить ресурс от спама, нежелательных регистраций или ограничить доступ только для сотрудников компании, партнёров или определённой группы пользователей.
Почему важно ограничивать регистрацию по email-доменам
Регистрация с неконтролируемых и подозрительных доменов может привести к появлению спам-аккаунтов, злоупотреблению функционалом сайта и увеличению нагрузки на сервер. Иногда, например, на корпоративных порталах, требуется разрешить регистрацию только с корпоративных адресов (например, @company.com). В других случаях — запретить регистрацию с публичных почтовых сервисов или с определённых доменов, которые ранее использовались для спама.
Такое ограничение помогает повысить безопасность сайта и улучшить качество базы пользователей.
Как реализовать запрет регистрации по email-доменам через код
Самый гибкий способ — добавить проверку при регистрации пользователя с помощью фильтра registration_errors. Ниже пример функции wpcommunity_restrict_registration_by_email_domain, которая запрещает регистрацию для определённых доменов.
function wpcommunity_restrict_registration_by_email_domain( $errors, $sanitized_user_login, $user_email ) {
$forbidden_domains = array('spamdomain.com', 'baddomain.net', 'example.org');
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( in_array( strtolower($email_domain), $forbidden_domains ) ) {
$errors->add('domain_blocked', __('Регистрация с домена "' . esc_html($email_domain) . '" запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wpcommunity_restrict_registration_by_email_domain', 10, 3);В этом коде:
- Массив
$forbidden_domainsсодержит домены, с которых регистрация запрещена. - Из email пользователя извлекается доменная часть после символа
@. - Если домен совпадает с запрещённым — добавляется ошибка в объект
$errors, и регистрация не проходит.
Вы можете легко расширить список запрещённых доменов или загрузить его из опций плагина или базы данных.
Расширение для разрешения регистрации только с определённых доменов
Если нужно не запретить, а наоборот — разрешить регистрацию только с выбранных доменов, логика меняется:
function wpcommunity_allow_registration_only_for_domains( $errors, $sanitized_user_login, $user_email ) {
$allowed_domains = array('company.com', 'partner.org');
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( !in_array( strtolower($email_domain), $allowed_domains ) ) {
$errors->add('domain_not_allowed', __('Регистрация разрешена только с корпоративных почтовых доменов.'));
}
return $errors;
}
add_filter('registration_errors', 'wpcommunity_allow_registration_only_for_domains', 10, 3);Этот подход часто применяется на сайтах с закрытым доступом.
Использование плагинов для ограничения регистрации по email-доменам
Если вы предпочитаете готовые решения и не хотите писать код, существуют плагины, которые позволяют ограничивать регистрацию по email-доменам через интерфейс:
- Restrict Email Domains — позволяет указать список разрешённых или запрещённых доменов для регистрации;
- Email Domain Whitelist — простой плагин для белого списка доменов;
- WP Email Restriction — позволяет гибко настраивать ограничения по доменам.
Для интеграции с продуктами WPCommunity можно создать расширение, которое использует встроенные хуки для добавления ограничения на уровне регистрации и профилей.
Как протестировать ограничение регистрации по email-доменам
После добавления кода или установки плагина важно протестировать работу ограничения:
- Попробуйте зарегистрироваться с запрещённым доменом — должна появиться ошибка и отказ в регистрации.
- Зарегистрируйтесь с разрешённым доменом — регистрация должна пройти успешно.
- Проверьте, чтобы сообщения об ошибках были понятными и информативными.
Также проверьте работу на разных формах регистрации, если используете кастомные плагины или темы.
Как расширить функционал: уведомления и логирование попыток
Для более продвинутой настройки можно добавить уведомления администратору при попытке регистрации с запрещённого домена и логирование таких событий. Это поможет анализировать попытки обхода и своевременно реагировать.
function wpcommunity_notify_admin_on_blocked_registration( $errors, $sanitized_user_login, $user_email ) {
$forbidden_domains = array('spamdomain.com');
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( in_array( strtolower($email_domain), $forbidden_domains ) ) {
// Отправляем письмо администратору
wp_mail(
get_option('admin_email'),
'Попытка регистрации с запрещённым доменом',
'Пользователь с email ' . $user_email . ' попытался зарегистрироваться с запрещённого домена.'
);
}
return $errors;
}
add_filter('registration_errors', 'wpcommunity_notify_admin_on_blocked_registration', 20, 3);Такой подход повышает контроль над регистрациями и помогает оперативно реагировать на подозрительные активности.
Итоги
Ограничение регистрации по email-доменам — простое, но мощное средство защиты сайта и контроля над пользователями. Используя фильтр registration_errors, вы можете реализовать любую логику проверки, а при необходимости — дополнить функционал уведомлениями и логированием. Если вы не хотите писать код, воспользуйтесь проверенными плагинами.
Для глубокой интеграции с WPCommunity и другими продуктами WPSHOP рассмотрите возможность создания собственного плагина-расширения с использованием хуков и фильтров платформы.