В большинстве случаев владельцам сайтов на WordPress нужно контролировать регистрацию новых пользователей. Часто возникает задача — запретить регистрацию по определённым email-адресам или доменам. Это полезно, если вы хотите ограничить регистрацию только определёнными компаниями, исключить спам или закрыть регистрацию с временных почтовых сервисов.
Почему важно контролировать регистрацию по email
По умолчанию WordPress позволяет любому пользователю зарегистрироваться с любым email. Это может привести к нескольким проблемам:
- Спам-аккаунты и боты, создающие массу мусорных пользователей.
- Регистрация с временных почтовых сервисов, которые сложно отслеживать.
- Нежелательные пользователи из определённых доменов или компаний.
Поэтому важно внедрить механизм фильтрации email при регистрации, чтобы повысить безопасность и качество пользователей.
Как ограничить регистрацию по email с помощью плагинов
Существуют готовые плагины, которые позволяют легко настроить разрешённые или запрещённые email-адреса и домены без кода.
1. Плагин Restrict Email Domains
Этот плагин позволяет задать список разрешённых доменов для регистрации. Если пользователь вводит email с другого домена — регистрация отклоняется с сообщением.
Настройка проста: в админке указываете допустимые домены через запятую. Например:
example.com, company.org
Плагин проверит email при регистрации и не позволит зарегистрироваться, если домен не совпадает с разрешёнными.
2. Плагин Clearfy Pro
Clearfy Pro — это набор оптимизаций и улучшений для WordPress, в том числе с расширенными настройками безопасности. В нем есть опция блокировки регистрации с временных почтовых сервисов и возможность ограничивать регистрацию по email с помощью черного списка.
Использование готовых решений экономит время и снижает риск ошибок.
Как запретить регистрацию по email программно
Если вы хотите реализовать кастомный фильтр без плагинов, можно использовать хук registration_errors, который позволяет проверять данные перед созданием пользователя.
Вот пример функции с префиксом wpfaq_, которая запрещает регистрацию для email с доменом temp-mail.org и spamdomain.com:
function wpfaq_restrict_email_registration($errors, $sanitized_user_login, $user_email) {
$blocked_domains = array('temp-mail.org', 'spamdomain.com');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
$errors->add('email_blocked', __('Регистрация с этого домена email запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wpfaq_restrict_email_registration', 10, 3);В этом коде мы достаем домен из email пользователя, сравниваем с массивом запрещённых и при совпадении добавляем ошибку, которая блокирует регистрацию.
Как расширить функционал фильтрации email
Можно добавить проверку на разрешённый список доменов, например, если хотите принять регистрацию только с корпоративных email:
function wpfaq_allow_only_corporate_email($errors, $sanitized_user_login, $user_email) {
$allowed_domains = array('example.com', 'company.org');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (!in_array(strtolower($email_domain), $allowed_domains)) {
$errors->add('email_not_allowed', __('Регистрация разрешена только с корпоративного email.'));
}
return $errors;
}
add_filter('registration_errors', 'wpfaq_allow_only_corporate_email', 10, 3);Такой подход гибок и не требует установки дополнительных плагинов.
Проверка email при регистрации через AJAX и REST API
Если на сайте используется кастомная форма регистрации с AJAX или через REST API, важно дополнительно проверять email на сервере. Пример для REST API:
add_action('rest_api_init', function () {
register_rest_route('wpfaq/v1', '/check_email', array(
'methods' => 'POST',
'callback' => 'wpfaq_rest_check_email',
'permission_callback' => '__return_true',
));
});
function wpfaq_rest_check_email(WP_REST_Request $request) {
$email = $request->get_param('email');
$blocked_domains = array('temp-mail.org', 'spamdomain.com');
$email_domain = substr(strrchr($email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
return new WP_REST_Response(array('valid' => false, 'message' => 'Регистрация с этого домена email запрещена.'), 400);
}
return new WP_REST_Response(array('valid' => true), 200);
}Это позволит делать быструю проверку email на стороне клиента перед отправкой формы.
Советы по улучшению безопасности регистрации
Помимо ограничения по email, рекомендуем использовать комплексные меры:
- Защита от ботов: добавьте капчу (например, с помощью плагина My Popup с капчей).
- Отключение регистрации, если она не нужна: в настройках WordPress можно полностью отключить регистрацию.
- Мониторинг новых регистраций: используйте плагины для уведомлений и блокировки подозрительных аккаунтов.
Такие меры помогут держать сайт в безопасности и снизить нагрузку на администраторов.
Выводы
Отключение или ограничение регистрации по email — важная задача для многих сайтов на WordPress. Вы можете решить её как с помощью готовых плагинов, так и с помощью простой кастомной функции. В статье приведены практические примеры с кодом, которые можно адаптировать под свои нужды.