Как установить ограничение на регистрацию в WordPress по доменным именам

В некоторых проектах на 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-сайта. Реализовать такую логику можно как с помощью простого кода, так и используя плагины с административным интерфейсом. Выбор зависит от задач и потребностей вашего проекта.

WooCommerce: решение проблем с расчетом доставки по зонам
12.05.2026
Как создать автоматические отчёты по активности пользователей в WordPress
15.04.2026
Как добавить поддержку WebP в WordPress без плагинов
10.04.2026
Как автоматизировать создание и удаление временных файлов в WordPress
21.01.2026
Как использовать хук WooCommerce 'woocommerce_order_status_changed' для дополнительных действий при смене статуса заказа
04.05.2026