В современных проектах на WordPress часто возникает необходимость ограничить регистрацию новых пользователей по определённым доменам электронной почты или целиком заблокировать регистрацию с нежелательных доменов. Это особенно актуально для закрытых сообществ, корпоративных сайтов и проектов с ограниченным доступом.
Почему важно ограничивать регистрацию по домену и email
Без ограничений любой пользователь может зарегистрироваться, используя любую почту. Это увеличивает риск появления спам-аккаунтов, фальшивых пользователей и повышает нагрузку на сайт. Ограничение регистрации помогает:
- Защитить сайт от спама и фальшивых аккаунтов.
- Ограничить доступ к закрытому контенту.
- Упростить управление пользователями и поддерживать качество сообщества.
Далее рассмотрим, как реализовать ограничения с помощью кода и плагинов.
Ограничение регистрации по домену email с помощью PHP-кода
Для ограничения регистрации можно использовать фильтр registration_errors, который позволяет проверить введённый email и, при необходимости, запретить регистрацию с ошибкой.
Пример функции, ограничивающей регистрацию только доменами example.com и wpmentor.ru:
function wpmentor_restrict_registration_by_email_domain($errors, $sanitized_user_login, $user_email) {
$allowed_domains = array('example.com', 'wpmentor.ru');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (!in_array($email_domain, $allowed_domains)) {
$errors->add('domain_restriction', __('Регистрация ограничена только доменами: example.com и wpmentor.ru', 'wpmentor'));
}
return $errors;
}
add_filter('registration_errors', 'wpmentor_restrict_registration_by_email_domain', 10, 3);В этом коде происходит извлечение домена из email и проверка его в списке разрешённых. Если домен не входит в список, регистрация блокируется с сообщением об ошибке.
Как добавить исключения и расширить список доменов
Чтобы разрешить регистрацию с несколькими доменами, достаточно добавить их в массив $allowed_domains. Для более гибкого управления можно вынести список в настройки плагина или темы.
Блокировка регистрации по определённым доменам
Иногда нужно наоборот — запретить регистрацию с определённых доменов, например, известных спам-доменов. Для этого код немного меняется:
function wpmentor_block_registration_by_email_domain($errors, $sanitized_user_login, $user_email) {
$blocked_domains = array('spamdomain.com', 'badmail.net');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array($email_domain, $blocked_domains)) {
$errors->add('domain_blocked', __('Регистрация с этого домена запрещена.', 'wpmentor'));
}
return $errors;
}
add_filter('registration_errors', 'wpmentor_block_registration_by_email_domain', 10, 3);Такой подход позволяет эффективно отсеивать нежелательные регистрации.
Использование плагинов для ограничения регистрации по email и домену
Если вы предпочитаете готовые решения, рекомендуем обратить внимание на следующие плагины:
- WP Email Restrict — простой плагин для ограничения регистрации по домену email. Позволяет задать белый список доменов.
- Registration Email Domain Filter — плагин с возможностью блокировки или разрешения доменов, поддерживает настройку через админку.
- Clearfy Pro — многофункциональный плагин для оптимизации и защиты сайта, включает в себя модули для ограничения регистрации.
Преимущество плагинов — удобный интерфейс и дополнительные функции без необходимости писать код. Недостаток — возможные конфликты с другими расширениями и необходимость обновления.
Ограничение регистрации по домену через WP-Cron: автоматическая очистка нежелательных пользователей
Если вы не хотите блокировать регистрацию, но хотите регулярно очищать пользователей с неподходящими доменами, можно настроить WP-Cron задачу, которая будет проверять и удалять таких пользователей.
function wpmentor_delete_blocked_email_users() {
$blocked_domains = array('spamdomain.com', 'badmail.net');
$args = array(
'role__in' => array('subscriber', 'customer'),
'fields' => array('ID', 'user_email')
);
$users = get_users($args);
foreach ($users as $user) {
$email_domain = substr(strrchr($user->user_email, '@'), 1);
if (in_array($email_domain, $blocked_domains)) {
wp_delete_user($user->ID);
}
}
}
if (!wp_next_scheduled('wpmentor_cron_delete_blocked_email_users')) {
wp_schedule_event(time(), 'daily', 'wpmentor_cron_delete_blocked_email_users');
}
add_action('wpmentor_cron_delete_blocked_email_users', 'wpmentor_delete_blocked_email_users');Этот код запускает ежедневную проверку и удаляет пользователей с запрещёнными доменами. Подходит для автоматического поддержания чистоты базы пользователей.
Выводы и рекомендации
Ограничение регистрации по домену и email — эффективный способ защитить сайт от спама и контролировать доступ. Выбирайте подходящий способ:
- Для простого ограничения — используйте фильтр
registration_errorsс кастомным кодом. - Для более удобного управления — воспользуйтесь плагинами, например, WP Email Restrict или Clearfy Pro.
- Для автоматической очистки — настройте WP-Cron задачу, как описано выше.
Таким образом, вы сможете гибко управлять регистрацией пользователей и поддерживать безопасность и качество вашего WordPress-сайта.