Ограничение регистрации пользователей по доменам email — актуальная задача для многих сайтов на WordPress, особенно если необходимо исключить нежелательных пользователей с определённых почтовых сервисов или корпоративных доменов. В этой статье подробно рассмотрим, как реализовать запрет регистрации по доменам email на уровне кода, а также с помощью плагинов, и разберём практические примеры для гибкой настройки.
Почему стоит ограничивать регистрацию по доменам email
Часто администраторы сайтов сталкиваются с проблемой спам-регистраций или с регистрациями пользователей с корпоративных доменов, которые не должны иметь доступ к определённому контенту или функциям. Запрет по доменам email помогает:
- Предотвратить массовую спам-регистрацию с бесплатных почтовых сервисов.
- Ограничить доступ корпоративных пользователей, если сайт предназначен для частной аудитории.
- Упростить модерацию новых пользователей и повысить безопасность.
Рассмотрим, как это реализовать в WordPress.
Запрет регистрации по доменам email через код — хук регистрации пользователя
WordPress предоставляет хук registration_errors, который позволяет проверить данные пользователя перед регистрацией и при необходимости добавить ошибку. Ниже пример функции, которая запрещает регистрацию по списку доменов.
Пример кода для wporg.ru
function wporg_restrict_email_domains_registration( $errors, $sanitized_user_login, $user_email ) {
// Список запрещённых доменов
$blocked_domains = array('spamdomain.com', 'tempmail.net', 'baddomain.org');
$email_domain = substr( strrchr( $user_email, '@' ), 1 );
if ( in_array( strtolower( $email_domain ), $blocked_domains ) ) {
$errors->add( 'domain_blocked', __( 'Регистрация с данного домена электронной почты запрещена.' ) );
}
return $errors;
}
add_filter( 'registration_errors', 'wporg_restrict_email_domains_registration', 10, 3 );В этом коде мы определяем массив $blocked_domains, в котором перечисляем домены, с которых регистрация запрещена. Функция получает домен из email и проверяет, есть ли он в списке. Если да — добавляет ошибку, и пользователь не сможет зарегистрироваться.
Как расширить функционал — использовать регулярные выражения и исключения
Если нужна более гибкая проверка, например, блокировать все субдомены определённого домена или наоборот разрешить конкретные поддомены, можно использовать регулярные выражения. Пример:
function wporg_restrict_email_domains_regex( $errors, $sanitized_user_login, $user_email ) {
// Запретить все домены вида tempmail.*
if ( preg_match('/@tempmail\./i', $user_email ) ) {
$errors->add( 'domain_blocked', __( 'Регистрация с данного домена электронной почты запрещена.' ) );
}
// Разрешить, например, mail.tempmail.com, заблокировать остальные
// Здесь можно добавить дополнительные правила
return $errors;
}
add_filter( 'registration_errors', 'wporg_restrict_email_domains_regex', 10, 3 );Использование плагинов для запрета регистрации по доменам email
Если вы предпочитаете использовать готовые решения, есть несколько плагинов, которые позволяют настроить ограничения регистрации по email:
- Restrict Email Domains — простой плагин для запрета или разрешения регистрации с определённых доменов.
- WP Email Restrictions — расширенные настройки, включая белые и чёрные списки.
- Clearfy Pro — плагин с функцией ограничения регистрации, а также множеством других оптимизаций для WordPress. Подробнее можно посмотреть на официальной странице Clearfy Pro.
Настройка таких плагинов обычно очень интуитивна: в админке в разделе настроек указываете запрещённые или разрешённые домены, и плагин автоматически обрабатывает проверки при регистрации.
Реализация запрета на регистрацию по домену email в форме регистрации с AJAX
Для улучшения UX можно проверить email пользователя прямо на форме регистрации без перезагрузки страницы с помощью AJAX. Это позволит пользователю сразу увидеть ошибку.
Пример AJAX-проверки email
1. Добавим JavaScript для отправки AJAX-запроса при вводе email:
jQuery(document).ready(function($) {
$('#user_email').on('blur', function() {
var email = $(this).val();
$.ajax({
url: wporg_ajax_obj.ajax_url,
type: 'POST',
data: {
action: 'wporg_check_email_domain',
email: email
},
success: function(response) {
if (!response.success) {
alert(response.data.message);
$('#user_email').val('');
}
}
});
});
});2. В functions.php добавим обработчик AJAX:
function wporg_ajax_check_email_domain() {
if ( ! isset( $_POST['email'] ) ) {
wp_send_json_error( array( 'message' => 'Email не передан.' ) );
}
$email = sanitize_email( $_POST['email'] );
$blocked_domains = array('spamdomain.com', 'tempmail.net', 'baddomain.org');
$email_domain = substr( strrchr( $email, '@' ), 1 );
if ( in_array( strtolower( $email_domain ), $blocked_domains ) ) {
wp_send_json_error( array( 'message' => 'Регистрация с данного домена электронной почты запрещена.' ) );
}
wp_send_json_success();
}
add_action( 'wp_ajax_wporg_check_email_domain', 'wporg_ajax_check_email_domain' );
add_action( 'wp_ajax_nopriv_wporg_check_email_domain', 'wporg_ajax_check_email_domain' );3. Не забудьте локализовать скрипт в PHP, чтобы передать URL для AJAX:
function wporg_enqueue_scripts() {
wp_enqueue_script( 'wporg-registration', get_template_directory_uri() . '/js/registration.js', array('jquery'), null, true );
wp_localize_script( 'wporg-registration', 'wporg_ajax_obj', array(
'ajax_url' => admin_url( 'admin-ajax.php' )
));
}
add_action( 'wp_enqueue_scripts', 'wporg_enqueue_scripts' );Такой подход значительно повышает удобство регистрации и снижает нагрузку на сервер за счёт ранней проверки email.
Советы по ведению списка запрещённых доменов и его обновлению
Важно регулярно обновлять список запрещённых доменов, так как появляются новые сервисы временной почты и спам-домены. Рекомендуется:
- Хранить список в отдельном конфигурационном файле или в настройках плагина.
- Использовать внешние API для проверки временных почтовых адресов.
- Внедрять логи регистрации с доменами для анализа и выявления новых нежелательных источников.
Кроме того, если вы используете плагин Clearfy Pro, там уже есть встроенные инструменты для управления регистрацией и фильтрации email, что упрощает задачу.
Заключение
Запрет регистрации по доменам email в WordPress — эффективный способ борьбы со спамом и нежелательными пользователями. Наиболее гибкий и контролируемый вариант — добавление собственного кода с использованием хука registration_errors. Для быстрого внедрения подойдут специализированные плагины, включая Clearfy Pro с расширенными возможностями. А реализация проверки email через AJAX улучшит UX и снизит нагрузку на сервер.
Используйте приведённые примеры и настраивайте их под свои задачи — и ваш сайт на WordPress станет надёжнее и безопаснее.