В некоторых проектах на WordPress может возникнуть необходимость ограничить регистрацию новых пользователей по доменным именам их email. Например, вы хотите разрешить регистрацию только пользователям с корпоративными почтовыми адресами или заблокировать адреса с определённых бесплатных почтовых сервисов. В этой статье мы рассмотрим, как реализовать подобное ограничение как с помощью кода, так и используя готовые плагины.
Почему важно ограничивать регистрацию по доменам email
Открытая регистрация в WordPress может привести к появлению нежелательных пользователей, спама или злоупотреблений. Особенно это актуально для сайтов с закрытым сообществом, корпоративных порталов или образовательных ресурсов. Ограничение по доменам почты помогает:
- Защитить сайт от спам-регистраций;
- Обеспечить, что пользователи принадлежат к определённой организации;
- Упростить модерацию новых аккаунтов;
- Повысить безопасность и качество пользовательской базы.
Далее рассмотрим конкретные способы реализации.
Ограничение регистрации по доменам email с помощью кода
Для реализации ограничения можно использовать хук registration_errors, который вызывается при регистрации пользователя. Добавим проверку домена email и вернём ошибку, если домен не разрешён.
Пример простого кода, который разрешает регистрацию только с доменом example.com и wptavern.ru:
function wptavern_restrict_registration_by_email_domain($errors, $sanitized_user_login, $user_email) {
$allowed_domains = array('example.com', 'wptavern.ru');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (!in_array(strtolower($email_domain), $allowed_domains)) {
$errors->add('domain_error', __('Регистрация разрешена только с корпоративных email доменов.'));
}
return $errors;
}
add_filter('registration_errors', 'wptavern_restrict_registration_by_email_domain', 10, 3);В этом коде:
- Мы получаем домен из email пользователя.
- Проверяем, есть ли он в списке разрешённых доменов.
- Если нет — добавляем ошибку, которая блокирует регистрацию.
Такой подход прост и эффективен, но требует ручного редактирования массива $allowed_domains. Для более гибких решений можно использовать административную панель или плагин.
Добавление ограничения по доменам с административным интерфейсом
Чтобы сделать управление доменами удобным для администраторов, можно добавить страницу настроек в админку WordPress и хранить список в опциях.
Пример кода для добавления страницы настроек и использования списка доменов из опций:
function wptavern_add_settings_page() {
add_options_page('Ограничение регистрации по доменам', 'Регистрация по доменам', 'manage_options', 'wptavern-domain-restriction', 'wptavern_render_settings_page');
}
add_action('admin_menu', 'wptavern_add_settings_page');
function wptavern_render_settings_page() {
if (isset($_POST['wptavern_domains'])) {
check_admin_referer('wptavern_save_domains');
update_option('wptavern_allowed_domains', sanitize_text_field($_POST['wptavern_domains']));
echo '<div class="updated"><p>Список доменов сохранён.</p></div>';
}
$domains = get_option('wptavern_allowed_domains', 'example.com,wptavern.ru');
?>
<div class="wrap">
<h1>Ограничение регистрации по доменам</h1>
<form method="post">
<?php wp_nonce_field('wptavern_save_domains'); ?>
<label for="wptavern_domains">Разрешённые домены (через запятую):</label><br>
<input type="text" name="wptavern_domains" id="wptavern_domains" value="<?php echo esc_attr($domains); ?>" style="width: 400px;"><br><br>
<input type="submit" class="button-primary" value="Сохранить">
</form>
</div>
<?php
}
function wptavern_restrict_registration_by_email_domain_dynamic($errors, $sanitized_user_login, $user_email) {
$domains_option = get_option('wptavern_allowed_domains', 'example.com,wptavern.ru');
$allowed_domains = array_map('trim', explode(',', $domains_option));
$email_domain = substr(strrchr($user_email, '@'), 1);
if (!in_array(strtolower($email_domain), $allowed_domains)) {
$errors->add('domain_error', __('Регистрация разрешена только с указанных email доменов.'));
}
return $errors;
}
add_filter('registration_errors', 'wptavern_restrict_registration_by_email_domain_dynamic', 10, 3);Этот код добавляет страницу настроек в меню «Настройки» и позволяет администратору управлять списком разрешённых доменов без правки кода.
Использование плагинов для ограничения регистрации по доменам
Если вы предпочитаете готовые решения, рассмотрите плагины, которые позволяют ограничивать регистрацию пользователей по email-доменам:
- Restrict Email Domains — простой плагин для ограничения регистрации по доменам, позволяет указать список разрешённых доменов.
- WP Email Domain Restriction — расширенный плагин с возможностью блокировать или разрешать домены, поддерживает уведомления и логи.
- Clearfy Pro — многофункциональный плагин оптимизации, в котором есть модуль для ограничения регистрации по доменам, а также другие полезные функции безопасности.
Все эти плагины можно найти и установить из репозитория WordPress или на WPSHOP.RU.
Советы по тестированию и отладке ограничения регистрации
После настройки ограничения важно тщательно проверить его работу:
- Попробуйте зарегистрироваться с разрешённых и запрещённых доменов.
- Проверьте, что сообщения об ошибках понятны пользователям.
- Убедитесь, что другие функции регистрации (например, приглашения или соцсети) не конфликтуют с ограничением.
- Если используете кеширование, очистите кеш после внесения изменений.
Для отладки можно временно добавить логирование ошибок регистрации в файл или использовать плагин для логирования, например, WPDebug.
Заключение
Ограничение регистрации пользователей по доменам email — важный инструмент для защиты и управления пользовательской базой WordPress-сайта. Реализовать такую логику можно как с помощью простого кода, так и используя плагины с административным интерфейсом. Выбор зависит от задач и потребностей вашего проекта.