Ограничение регистрации пользователей по email — частая задача для сайтов на WordPress, особенно если нужно контролировать, кто может создавать аккаунты. Например, часто требуется разрешить регистрацию только на корпоративные или определённые домены электронной почты, чтобы защитить сайт от спама или нежелательных пользователей.
Почему важно ограничивать регистрацию по email
Без ограничений любой пользователь может зарегистрироваться, что приводит к росту базы некачественных аккаунтов. Это может негативно сказаться на безопасности, нагрузке на сервер и общем управлении сайтом. Настройка ограничений по email — простое и эффективное решение для улучшения контроля.
Чаще всего требуется ограничить регистрацию:
- Только корпоративными адресами — например, *@yourcompany.com
- Только определёнными доменами (например, gmail.com, yandex.ru и т.п.)
- Запретить регистрацию с временных почтовых сервисов
Как реализовать ограничение регистрации по email в WordPress
Для реализации ограничения нам понадобится использовать хуки WordPress, которые позволяют проверять данные при регистрации. Основной хук — registration_errors. Он вызывается при попытке зарегистрировать нового пользователя и позволяет нам добавить свои проверки.
Пример функции, которая разрешает регистрацию только с email @example.com и @wpshop.ru:
function wpcourse_restrict_registration_by_email( $errors, $sanitized_user_login, $user_email ) {
$allowed_domains = array( 'example.com', 'wpshop.ru' );
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( ! in_array( strtolower($email_domain), $allowed_domains ) ) {
$errors->add( 'domain_restriction', __('Регистрация разрешена только с email доменов: example.com, wpshop.ru') );
}
return $errors;
}
add_filter( 'registration_errors', 'wpcourse_restrict_registration_by_email', 10, 3 );Этот код добавляем в файл functions.php вашей активной темы или в плагин-сниппет. Он проверяет домен email и запрещает регистрацию, если домен не входит в список разрешённых.
Запрет регистрации с временных email сервисов
Временные почтовые сервисы часто используются для спама и регистрации фейковых аккаунтов. Чтобы заблокировать их, можно использовать список популярных временных доменов и проверять email при регистрации.
Пример кода для блокировки популярных временных доменов:
function wpcourse_block_temp_email_domains( $errors, $sanitized_user_login, $user_email ) {
$temp_domains = array(
'mailinator.com', '10minutemail.com', 'tempmail.com', 'yopmail.com', 'guerrillamail.com'
);
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( in_array( strtolower($email_domain), $temp_domains ) ) {
$errors->add( 'temp_email_block', __('Регистрация с временных email адресов запрещена.') );
}
return $errors;
}
add_filter( 'registration_errors', 'wpcourse_block_temp_email_domains', 10, 3 );Для удобства можно объединить обе проверки в одну функцию, чтобы не перегружать систему лишними фильтрами.
Использование плагинов для ограничения регистрации по email
Если вы не хотите писать код, есть готовые плагины, которые позволяют ограничить регистрацию по email:
- Restrict User Signups — простой плагин для ограничения по доменам email и ручного одобрения аккаунтов.
- WP Email Restrictions — позволяет указать белые и чёрные списки доменов.
- Clearfy Pro — комплексный плагин для оптимизации и безопасности, имеет функции ограничения регистрации и фильтрации спама.
Применение плагинов удобно, если вы хотите быстро внедрить ограничение без правки кода, а также получить дополнительные настройки безопасности.
Дополнительные советы по ограничению регистрации
1. Валидация email еще на стороне формы
Для улучшения UX полезно проверять email домен сразу в форме регистрации через JavaScript, чтобы пользователь сразу понимал ошибку.
2. Ограничение по IP и капча
Чтобы усилить защиту, комбинируйте ограничение email с блокировкой по IP и использованием капчи, например, Google reCAPTCHA или плагином My Popup для вывода капчи в попапе.
3. Логирование попыток регистрации
Для анализа потенциальных атак полезно вести лог попыток регистрации с запрещёнными email доменами, чтобы выявить источники спама.
Как сделать уведомление администратора о регистрации с запрещённым email
Иногда полезно получать уведомления, если кто-то пытался зарегистрироваться с запрещённым email. Для этого можно добавить отправку email в проверку:
function wpcourse_notify_admin_on_restricted_email( $errors, $sanitized_user_login, $user_email ) {
$allowed_domains = array( 'example.com', 'wpshop.ru' );
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( ! in_array( strtolower($email_domain), $allowed_domains ) ) {
$errors->add( 'domain_restriction', __('Регистрация разрешена только с email доменов: example.com, wpshop.ru') );
wp_mail( get_option('admin_email'), 'Попытка регистрации с запрещённым email',
'Пользователь с email ' . $user_email . ' попытался зарегистрироваться на сайте.' );
}
return $errors;
}
remove_filter( 'registration_errors', 'wpcourse_restrict_registration_by_email', 10 );
add_filter( 'registration_errors', 'wpcourse_notify_admin_on_restricted_email', 10, 3 );Обратите внимание, что мы удалили старый фильтр и добавили новый с расширенной логикой.
Итог
Ограничение регистрации по email — важный инструмент для контроля доступа на WordPress-сайте. С помощью простых хуков и проверок можно запретить регистрацию с нежелательных доменов, временных почтовых сервисов и повысить безопасность сайта. Если вы предпочитаете использовать готовые решения, обратите внимание на специализированные плагины, например, Clearfy Pro.
Такой подход поможет вам избежать многих проблем со спамом и некачественными пользователями, а также улучшить качество аудитории на вашем сайте.