В некоторых случаях владельцам сайтов на WordPress необходимо ограничить регистрацию новых пользователей по определённым email-доменам. Например, чтобы запретить регистрацию с корпоративных или временных почтовых сервисов, которые часто используются для спама. В этой статье мы рассмотрим, как реализовать такую фильтрацию с помощью собственного кода и полезных плагинов, а также разберём лучшие практики.
Почему стоит ограничивать регистрацию по email-домену
Контроль за регистрациями позволяет улучшить безопасность сайта и качество пользовательской базы. Запрещая регистрацию с нежелательных доменов, вы снижаете риск появления спамеров, троллей и ботов. Также это помогает удерживать аудиторию в рамках целевой группы, если сайт заточен под конкретную компанию или сообщество.
Однако важно сбалансировать ограничения, чтобы не отпугнуть реальных пользователей. Поэтому стоит грамотно подойти к выбору запрещённых доменов и протестировать работу фильтрации.
Как реализовать запрет по email-домену через код в WordPress
Добавление проверки при регистрации
WordPress позволяет добавлять кастомные проверки на этапе регистрации через хук registration_errors. Давайте создадим функцию wpzen_restrict_email_domain_registration, которая будет блокировать регистрацию, если домен email адреса входит в список запрещённых.
function wpzen_restrict_email_domain_registration($errors, $sanitized_user_login, $user_email) {
// Список запрещённых доменов
$blocked_domains = array('spamdomain.com', 'tempmail.net', 'baddomain.ru');
// Получаем домен из email
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с данного email-домена запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wpzen_restrict_email_domain_registration', 10, 3);Эта функция проверяет, находится ли домен email в массиве запрещённых. При совпадении добавляется ошибка, и регистрация блокируется.
Расширение списка запрещённых доменов через админку
Для удобства можно добавить настройку в админпанель, чтобы управлять списком доменов без правки кода. Один из вариантов — использовать опцию WordPress и форму в разделе настроек.
Пример добавления опции и вывода поля в админке:
function wpzen_email_domain_settings_init() {
register_setting('general', 'wpzen_blocked_email_domains', array(
'type' => 'string',
'sanitize_callback' => 'sanitize_textarea_field',
'default' => '',
));
add_settings_field(
'wpzen_blocked_email_domains',
'Запрещённые email-домены (через запятую)',
'wpzen_email_domain_settings_field_html',
'general'
);
}
add_action('admin_init', 'wpzen_email_domain_settings_init');
function wpzen_email_domain_settings_field_html() {
$value = get_option('wpzen_blocked_email_domains', '');
echo '<textarea name="wpzen_blocked_email_domains" rows="5" cols="50" class="large-text code">' . esc_textarea($value) . '</textarea>';
}Далее меняем функцию фильтрации, чтобы она брала домены из этой опции:
function wpzen_restrict_email_domain_registration($errors, $sanitized_user_login, $user_email) {
$blocked_domains_option = get_option('wpzen_blocked_email_domains', '');
$blocked_domains = array_map('trim', explode(',', $blocked_domains_option));
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array(strtolower($email_domain), $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с данного email-домена запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wpzen_restrict_email_domain_registration', 10, 3);Использование плагинов для ограничения регистрации по email-домену
Если вы предпочитаете готовые решения, можно обратить внимание на плагины, которые поддерживают фильтрацию email-доменов:
- WP Email Domain Restriction — простой плагин, который позволяет запретить регистрацию по указанным доменам. Простой в настройке.
- RegistrationMagic — мощный инструмент для регистрации с гибкими ограничениями, включая фильтрацию email-доменов.
- Restrict User Signups — плагин с возможностью задать белые и чёрные списки доменов, подходит для корпоративных сайтов.
Преимущество плагинов в том, что они обычно имеют UI для управления списками и не требуют ручного изменения кода.
Как тестировать и отлаживать запрет регистрации
После внедрения кода или установки плагина важно тщательно протестировать регистрацию:
- Попробуйте зарегистрироваться с запрещённым доменом — регистрация должна блокироваться с понятным сообщением.
- Проверьте регистрацию с разрешённым доменом — должна проходить без ошибок.
- Проверьте работу с разными регистрационными формами, если на сайте их несколько.
Для отладки можно временно включить вывод ошибок WordPress и логирование через WP_DEBUG. Также полезно добавить логирование в код фильтрации, чтобы фиксировать попытки регистрации с запрещёнными доменами.
Резюме и рекомендации
Запрет на регистрацию по email-домену — эффективный способ контролировать пользователей и снижать спам. Реализовать его можно как через кастомный код с хукми WordPress, так и через специализированные плагины. Важно обеспечить удобство управления списком доменов и тщательно тестировать функциональность.
Если вы хотите быстро внедрить этот функционал без программирования, попробуйте плагин WP Email Domain Restriction — он хорошо подходит для большинства задач.
Также рекомендую подключать дополнительные меры защиты, например, капчу и двухфакторную аутентификацию, чтобы повысить безопасность сайта.