В некоторых случаях необходимо ограничить регистрацию на сайте WordPress, разрешая регистрацию только с определённых доменов электронной почты. Такой подход часто применяется для корпоративных сайтов, закрытых сообществ или учебных платформ, где регистрация пользователей должна происходить только с адресов корпоративного или образовательного домена.
Почему нужно ограничивать регистрацию по домену e-mail
Ограничение регистрации по домену электронной почты позволяет:
- Контролировать аудиторию сайта, допуская только пользователей из нужной организации или сообщества;
- Уменьшить вероятность регистрации спам-аккаунтов;
- Автоматизировать процесс одобрения пользователей, исключая необходимость ручной модерации;
- Повысить безопасность и снизить нагрузку на администратора.
Без такого ограничения на публичных сайтах с открытой регистрацией часто появляются нежелательные пользователи, что негативно сказывается на работе сайта.
Как реализовать ограничение регистрации по домену e-mail в WordPress
Для реализации этого ограничения есть несколько способов: с помощью кода или с помощью плагинов. Рассмотрим оба варианта.
Реализация на PHP с использованием хука регистрации
WordPress предоставляет хук registration_errors, который позволяет проверять данные регистрации и выдавать ошибки при несоответствии условий.
Ниже пример функции из пространства WPCommunity, которая ограничивает регистрацию только доменом example.com:
function wpcommunity_restrict_registration_by_email_domain( $errors, $sanitized_user_login, $user_email ) {
$allowed_domain = 'example.com';
$email_domain = substr(strrchr($user_email, '@'), 1);
if ( strtolower($email_domain) !== strtolower($allowed_domain) ) {
$errors->add(
'invalid_email_domain',
sprintf('Регистрация разрешена только с e-mail домена «%s». Ваш домен: «%s».', $allowed_domain, $email_domain)
);
}
return $errors;
}
add_filter( 'registration_errors', 'wpcommunity_restrict_registration_by_email_domain', 10, 3 );
Этот код проверяет домен e-mail и если он не совпадает с разрешённым, то регистрация будет заблокирована с соответствующим сообщением об ошибке.
Как разрешить несколько доменов
Если нужно разрешить регистрацию с нескольких доменов, можно использовать массив и проверять вхождение домена в этот список:
function wpcommunity_restrict_registration_by_email_domains( $errors, $sanitized_user_login, $user_email ) {
$allowed_domains = array('example.com', 'mysite.org', 'university.edu');
$email_domain = strtolower(substr(strrchr($user_email, '@'), 1));
if ( ! in_array($email_domain, $allowed_domains) ) {
$errors->add(
'invalid_email_domain',
'Регистрация разрешена только с e-mail доменов: ' . implode(', ', $allowed_domains) . '. Ваш домен: «' . $email_domain . '».'
);
}
return $errors;
}
add_filter( 'registration_errors', 'wpcommunity_restrict_registration_by_email_domains', 10, 3 );
Такой подход гибко позволяет расширять список разрешённых доменов без сложных настроек.
Использование плагинов для ограничения регистрации по домену e-mail
Если вы предпочитаете использовать готовые решения, обратите внимание на следующие плагины с поддержкой ограничения доменов:
- WP Email Domain Restriction — простой и бесплатный плагин, который позволяет ограничить регистрацию по указанным доменам e-mail через настройки.
- Clearfy Pro — мощный плагин для оптимизации и защиты WordPress, в котором есть модуль для ограничения регистрации по доменам e-mail, а также функции защиты сайта от спама и ботов.
- WPCommunity — набор инструментов для управления сообществом WordPress, в котором можно создавать правила регистрации, включая проверку домена e-mail.
Плагины обычно имеют удобный интерфейс и позволяют быстро настроить ограничения без правки кода, что идеально для пользователей без опыта программирования.
Обработка ошибок и улучшение UX при ограничении домена e-mail
Очень важно, чтобы пользователь при попытке зарегистрироваться с запрещённого домена получил понятное и дружелюбное сообщение об ошибке. В кодовом примере выше мы уже добавили кастомное сообщение, но можно дополнительно:
- Добавить подсказку в форму регистрации о допустимых доменах;
- Использовать JavaScript для моментальной проверки e-mail при вводе и отображения ошибок без перезагрузки страницы;
- Обеспечить корректный перевод сообщения, если сайт многоязычный.
Ниже пример простого JS для проверки домена e-mail на клиенте (можно добавить в шаблон формы регистрации):
document.addEventListener('DOMContentLoaded', function () {
const allowedDomains = ['example.com', 'mysite.org'];
const emailInput = document.querySelector('#user_email');
const errorContainer = document.createElement('div');
errorContainer.style.color = 'red';
emailInput.parentNode.appendChild(errorContainer);
emailInput.addEventListener('input', function () {
const email = emailInput.value;
const domain = email.substring(email.lastIndexOf('@') + 1).toLowerCase();
if (email && !allowedDomains.includes(domain)) {
errorContainer.textContent = 'Регистрация разрешена только с доменов: ' + allowedDomains.join(', ');
} else {
errorContainer.textContent = '';
}
});
});
Резюме и рекомендации по безопасности
Ограничение регистрации по домену e-mail — мощный инструмент для контроля доступа на ваш сайт WordPress. Важно:
- Тестировать решение на разных типах адресов и учитывать возможные вариации (например, поддомены);
- Поддерживать список разрешённых доменов в актуальном состоянии;
- Использовать как минимум серверную проверку на PHP, а по возможности дополнять клиентской проверкой для удобства пользователей;
- В случае использования плагинов — регулярно обновлять их и выбирать проверенные решения с хорошими отзывами.
Если вы хотите интегрировать ограничение регистрации в более комплексную систему управления сообществом, обратите внимание на WPCommunity, который отлично подходит для подобных задач.