Часто на WordPress-сайтах необходимо ограничить регистрацию новых пользователей по определённым доменам электронной почты. Это помогает предотвратить регистрацию спамеров, нежелательных или корпоративных аккаунтов, например, если вы хотите разрешить регистрацию только с корпоративных или наоборот заблокировать определённые домены.
Почему важно ограничивать регистрацию по домену email
Без ограничений любой пользователь может зарегистрироваться с любым email, включая массовые почтовые сервисы вроде @gmail.com или @yahoo.com, а также временные почтовые сервисы. Если ваш сайт требует определённого уровня доверия к пользователям (например, корпоративный портал, сайт для сотрудников, образовательная платформа), то контроль домена email – ключевой элемент безопасности и удобства.
К тому же, блокировка регистраций по нежелательным доменам помогает снизить количество спам-аккаунтов и повысить качество аудитории.
Как запретить регистрацию по домену email через функции WordPress
Самый простой и гибкий способ — использовать хук registration_errors, который позволяет перехватывать и проверять данные при регистрации, включая email пользователя.
Ниже пример функции для wporg.ru, которая запрещает регистрацию с доменов example.com и tempmail.com:
function wporg_check_email_domain_registration($errors, $sanitized_user_login, $user_email) {
// Список запрещённых доменов
$blocked_domains = array('example.com', 'tempmail.com');
// Получаем домен email
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с домена "' . $email_domain . '" запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wporg_check_email_domain_registration', 10, 3);Данная функция получает email пользователя, выделяет домен и проверяет его в списке запрещённых. Если домен найден, добавляется ошибка, которая блокирует регистрацию с соответствующим сообщением.
Как расширить список запрещённых доменов
Вы можете добавить любые домены в массив $blocked_domains. Для удобства список можно вынести в отдельную опцию или файл конфигурации, чтобы не менять код при обновлениях.
Пример расширенного варианта с загрузкой из файла blocked-domains.txt в папке темы:
function wporg_check_email_domain_registration($errors, $sanitized_user_login, $user_email) {
$blocked_domains_file = get_template_directory() . '/blocked-domains.txt';
$blocked_domains = array();
if (file_exists($blocked_domains_file)) {
$contents = file_get_contents($blocked_domains_file);
$blocked_domains = array_filter(array_map('trim', explode("\n", $contents)));
}
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с домена "' . $email_domain . '" запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wporg_check_email_domain_registration', 10, 3);Как уведомить пользователя о причине блокировки
WordPress автоматически выводит ошибки из объекта WP_Error при регистрации, поэтому пользователь увидит сообщение, добавленное в функцию выше. Желательно сделать сообщение максимально понятным, чтобы пользователь понял причину отказа.
Можно добавить ссылку на страницу с правилами регистрации или форму обратной связи для помощи.
Плагины для ограничения регистрации по email
Если вы не хотите писать код, можно использовать готовые решения. Вот несколько популярных плагинов с такими возможностями:
- Registration Email Domain Filter – простой плагин для запрета или разрешения регистрации по доменам email.
- WP Email Domain Restriction – позволяет задать белый или чёрный список доменов для регистрации.
- Restrict Email Registration – плагин с более широкими настройками, включая массовый импорт доменов.
Примеры плагинов можно найти на WPSHOP.ru, где есть удобный каталог с подробным описанием.
Интеграция с плагином Clearfy Pro
Если у вас установлен Clearfy Pro, в нем также есть возможность управлять регистрацией и блокировкой по email, что позволяет централизованно контролировать доступ без ручного кода.
Дополнительные советы и рекомендации
1. Тестируйте функцию на тестовом сайте, чтобы убедиться, что блокировка работает корректно и не мешает легитимным пользователям.
2. Логируйте попытки регистрации с запрещёнными доменами, чтобы анализировать и предотвращать новые спам-атаки.
3. Если у вас много доменов для запрета, используйте более производительные методы хранения (например, transient, кэширование) и избегайте чтения файлов на каждой регистрации.
4. Комбинируйте ограничение по домену с другими методами защиты, например, капчей, проверкой IP и ограничением количества регистраций с одного IP.
Заключение
Ограничение регистрации пользователей по домену email – простой, но эффективный способ повысить безопасность и качество аудитории WordPress-сайта. Используя хук registration_errors, можно быстро внедрить проверку с минимальным количеством кода, а при необходимости – расширить функционал с помощью плагинов и интеграций.
Используйте приведённые примеры и рекомендации, чтобы настроить регистрацию под задачи вашего проекта и защитить сайт от нежелательных пользователей.