Запрет регистрации по доменам email в WordPress с подробным руководством

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

Почему стоит ограничивать регистрацию по доменам email

Часто администраторы сайтов сталкиваются с проблемой спам-регистраций или с регистрациями пользователей с корпоративных доменов, которые не должны иметь доступ к определённому контенту или функциям. Запрет по доменам email помогает:

  • Предотвратить массовую спам-регистрацию с бесплатных почтовых сервисов.
  • Ограничить доступ корпоративных пользователей, если сайт предназначен для частной аудитории.
  • Упростить модерацию новых пользователей и повысить безопасность.

Рассмотрим, как это реализовать в WordPress.

Запрет регистрации по доменам email через код — хук регистрации пользователя

WordPress предоставляет хук registration_errors, который позволяет проверить данные пользователя перед регистрацией и при необходимости добавить ошибку. Ниже пример функции, которая запрещает регистрацию по списку доменов.

Пример кода для wporg.ru

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

    $email_domain = substr( strrchr( $user_email, '@' ), 1 );

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

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

В этом коде мы определяем массив $blocked_domains, в котором перечисляем домены, с которых регистрация запрещена. Функция получает домен из email и проверяет, есть ли он в списке. Если да — добавляет ошибку, и пользователь не сможет зарегистрироваться.

Как расширить функционал — использовать регулярные выражения и исключения

Если нужна более гибкая проверка, например, блокировать все субдомены определённого домена или наоборот разрешить конкретные поддомены, можно использовать регулярные выражения. Пример:

function wporg_restrict_email_domains_regex( $errors, $sanitized_user_login, $user_email ) {
    // Запретить все домены вида tempmail.*
    if ( preg_match('/@tempmail\./i', $user_email ) ) {
        $errors->add( 'domain_blocked', __( 'Регистрация с данного домена электронной почты запрещена.' ) );
    }

    // Разрешить, например, mail.tempmail.com, заблокировать остальные
    // Здесь можно добавить дополнительные правила

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

Использование плагинов для запрета регистрации по доменам email

Если вы предпочитаете использовать готовые решения, есть несколько плагинов, которые позволяют настроить ограничения регистрации по email:

  • Restrict Email Domains — простой плагин для запрета или разрешения регистрации с определённых доменов.
  • WP Email Restrictions — расширенные настройки, включая белые и чёрные списки.
  • Clearfy Pro — плагин с функцией ограничения регистрации, а также множеством других оптимизаций для WordPress. Подробнее можно посмотреть на официальной странице Clearfy Pro.

Настройка таких плагинов обычно очень интуитивна: в админке в разделе настроек указываете запрещённые или разрешённые домены, и плагин автоматически обрабатывает проверки при регистрации.

Реализация запрета на регистрацию по домену email в форме регистрации с AJAX

Для улучшения UX можно проверить email пользователя прямо на форме регистрации без перезагрузки страницы с помощью AJAX. Это позволит пользователю сразу увидеть ошибку.

Пример AJAX-проверки email

1. Добавим JavaScript для отправки AJAX-запроса при вводе email:

jQuery(document).ready(function($) {
    $('#user_email').on('blur', function() {
        var email = $(this).val();
        $.ajax({
            url: wporg_ajax_obj.ajax_url,
            type: 'POST',
            data: {
                action: 'wporg_check_email_domain',
                email: email
            },
            success: function(response) {
                if (!response.success) {
                    alert(response.data.message);
                    $('#user_email').val('');
                }
            }
        });
    });
});

2. В functions.php добавим обработчик AJAX:

function wporg_ajax_check_email_domain() {
    if ( ! isset( $_POST['email'] ) ) {
        wp_send_json_error( array( 'message' => 'Email не передан.' ) );
    }

    $email = sanitize_email( $_POST['email'] );
    $blocked_domains = array('spamdomain.com', 'tempmail.net', 'baddomain.org');
    $email_domain = substr( strrchr( $email, '@' ), 1 );

    if ( in_array( strtolower( $email_domain ), $blocked_domains ) ) {
        wp_send_json_error( array( 'message' => 'Регистрация с данного домена электронной почты запрещена.' ) );
    }

    wp_send_json_success();
}
add_action( 'wp_ajax_wporg_check_email_domain', 'wporg_ajax_check_email_domain' );
add_action( 'wp_ajax_nopriv_wporg_check_email_domain', 'wporg_ajax_check_email_domain' );

3. Не забудьте локализовать скрипт в PHP, чтобы передать URL для AJAX:

function wporg_enqueue_scripts() {
    wp_enqueue_script( 'wporg-registration', get_template_directory_uri() . '/js/registration.js', array('jquery'), null, true );
    wp_localize_script( 'wporg-registration', 'wporg_ajax_obj', array(
        'ajax_url' => admin_url( 'admin-ajax.php' )
    ));
}
add_action( 'wp_enqueue_scripts', 'wporg_enqueue_scripts' );

Такой подход значительно повышает удобство регистрации и снижает нагрузку на сервер за счёт ранней проверки email.

Советы по ведению списка запрещённых доменов и его обновлению

Важно регулярно обновлять список запрещённых доменов, так как появляются новые сервисы временной почты и спам-домены. Рекомендуется:

  • Хранить список в отдельном конфигурационном файле или в настройках плагина.
  • Использовать внешние API для проверки временных почтовых адресов.
  • Внедрять логи регистрации с доменами для анализа и выявления новых нежелательных источников.

Кроме того, если вы используете плагин Clearfy Pro, там уже есть встроенные инструменты для управления регистрацией и фильтрации email, что упрощает задачу.

Заключение

Запрет регистрации по доменам email в WordPress — эффективный способ борьбы со спамом и нежелательными пользователями. Наиболее гибкий и контролируемый вариант — добавление собственного кода с использованием хука registration_errors. Для быстрого внедрения подойдут специализированные плагины, включая Clearfy Pro с расширенными возможностями. А реализация проверки email через AJAX улучшит UX и снизит нагрузку на сервер.

Используйте приведённые примеры и настраивайте их под свои задачи — и ваш сайт на WordPress станет надёжнее и безопаснее.

Скачать WP с оф. сайта Магазин проверенных платных тем