Как запретить регистрацию для определённых доменов в WordPress

Диагностика проблемы: зачем ограничивать регистрацию по домену

В стандартном WordPress нет встроенных настроек для фильтрации регистраций пользователей по email-доменам. Это часто становится проблемой на сайтах с открытой регистрацией, когда нужно запретить регистрацию с бесплатных почтовых сервисов, временных почтовых ящиков или корпоративных доменов конкурентов. Без такой фильтрации можно получить множество мусорных аккаунтов, что снижает безопасность и качество базы пользователей.

Пошаговое решение: фильтрация регистрации по домену email

1. Использование хука registration_errors

Для запрета регистрации с определённых доменов нужно использовать фильтр registration_errors, который позволяет валидировать данные перед созданием пользователя.

2. Пример кода для functions.php

function wpweb_block_email_domains( $errors, $sanitized_user_login, $user_email ) {
    // Список запрещённых доменов
    $blocked_domains = array('tempmail.com', 'disposablemail.com', 'spamdomain.net');

    // Получаем домен из email
    $email_domain = strtolower( substr( strrchr( $user_email, '@' ), 1 ) );

    if ( in_array( $email_domain, $blocked_domains ) ) {
        $errors->add( 'domain_blocked', __( 'Регистрация с этого домена электронной почты запрещена.' ) );
    }

    return $errors;
}
add_filter( 'registration_errors', 'wpweb_block_email_domains', 10, 3 );

3. Добавление доменов в список

Добавляйте в массив $blocked_domains все домены, которые хотите заблокировать. Можно расширить функционал, загрузив список из файла или настроек плагина.

Проверка результата после внедрения

Для проверки:

  • Перейдите на страницу регистрации WordPress (обычно /wp-login.php?action=register).
  • Попробуйте зарегистрироваться, указав email с запрещённым доменом — регистрация должна быть заблокирована с ошибкой.
  • Зарегистрируйтесь с разрешённым доменом — регистрация должна пройти успешно.

Если вы используете сторонние плагины регистрации, проверьте, что они корректно вызывают стандартный хук registration_errors.

Частые ошибки и как их исправить

  • Ошибка: фильтр не срабатывает при регистрации через плагин
    Причина: плагин регистрации не использует стандартные хуки WordPress.
    Решение: проверьте документацию плагина, возможно, там есть свои фильтры или методы для валидации регистрации.
  • Ошибка: пользователи обходят фильтр, регистрируясь с похожими доменами
    Причина: в коде проверяется точное совпадение домена.
    Решение: используйте проверку по суффиксу или расширьте список запрещённых доменов, например, блокировать все поддомены типа mail.tempmail.com.
  • Ошибка: регистрируются email с большими буквами, и фильтр не срабатывает
    Причина: сравнение доменов без приведения к нижнему регистру.
    Решение: используйте strtolower для преобразования домена перед сравнением.

Практические советы по безопасности и производительности

  • Храните список запрещённых доменов в отдельном конфигурационном файле или настройках плагина, чтобы не редактировать код при каждом изменении.
  • Регулярно обновляйте список временных и спам-доменов — их много и они меняются.
  • Для ускорения проверки используйте in_array с массивом, а при большом списке — применяйте структуры данных с быстрым поиском, например, хеш-таблицы.
  • Если ваш сайт использует WooCommerce или кастомные формы регистрации, интегрируйте проверку в соответствующие хуки этих плагинов.

Сравнение способов ограничения регистрации по домену

МетодПлюсыМинусыКогда использовать
Фильтр registration_errors (код)Лёгкий, без плагинов, гибкийТребует базовых знаний PHP, не всегда срабатывает с плагинами регистрацииНебольшие сайты с классической регистрацией
Плагины фильтрации email (например, WPBruiser, CleanTalk)Простота настройки, поддержка обновленийМожет влиять на производительность, зависит от стороннего кодаСложные сайты с большим трафиком и регистрациями
Кастомные решения в плагинах регистрацииМаксимальная интеграцияТребует разработки и поддержкиКастомные проекты с уникальными формами
Как удалить редирект цикл в WordPress: пошаговое руководство
19.04.2026
Как удалить неиспользуемые метаконтакты в WordPress для оптимизации сайта
01.01.2026
Автоматическое отправление email по расписанию в WordPress: пошаговое руководство
14.01.2026
Как удалить неиспользуемые термины таксономии в WordPress для оптимизации базы данных
11.01.2026
Как удалить ненужные размеры изображений WooCommerce без плагинов
10.05.2026