Как установить ограничение на регистрацию пользователей в WordPress

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

Зачем ограничивать регистрацию пользователей в WordPress

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

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

Настройка базовой регистрации в WordPress

Для начала убедимся, что регистрация включена. В админ-панели зайдите в Настройки > Общие и активируйте «Любой может зарегистрироваться».

Теперь рассмотрим способы ограничения.

Ограничение регистрации по количеству за день

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

Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:

function wpengine_limit_registrations_per_day($user_login, $user_email, $errors) {
    global $wpdb;
    $limit = 5; // Максимум регистраций в сутки
    $time_24h_ago = date('Y-m-d H:i:s', strtotime('-24 hours'));

    $count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $wpdb->users WHERE user_registered >= %s",
        $time_24h_ago
    ));

    if ($count >= $limit) {
        $errors->add('registration_limit_reached', __('Извините, сегодня регистрация новых пользователей закрыта. Попробуйте завтра.'));
    }
}
add_action('register_post', 'wpengine_limit_registrations_per_day', 10, 3);

Этот код отслеживает количество зарегистрированных пользователей за последние 24 часа и блокирует регистрацию, если их больше 5.

Ограничение регистрации по домену электронной почты

Если вы хотите разрешить регистрацию только для пользователей с определёнными доменами email, добавьте проверку в момент регистрации:

function wpengine_restrict_email_domain($user_login, $user_email, $errors) {
    $allowed_domains = array('example.com', 'mysite.ru');
    $email_domain = substr(strrchr($user_email, '@'), 1);

    if (!in_array($email_domain, $allowed_domains)) {
        $errors->add('email_domain_restricted', __('Регистрация разрешена только для email с доменами: ') . implode(', ', $allowed_domains));
    }
}
add_action('register_post', 'wpengine_restrict_email_domain', 10, 3);

Замените домены в $allowed_domains на свои. Таким образом, регистрация будет разрешена только для пользователей с email из указанного списка.

Добавление капчи для защиты от спам-ботов

Для защиты от автоматических регистраций рекомендуем использовать капчу. Один из популярных плагинов — Google Captcha (reCAPTCHA) by BestWebSoft. Он легко интегрируется с формой регистрации.

Если хочется реализовать капчу вручную, можно добавить простую математическую задачу. Пример кода:

function wpengine_add_captcha_field() {
    $num1 = rand(1, 9);
    $num2 = rand(1, 9);
    $_SESSION['wpengine_captcha_answer'] = $num1 + $num2;
    echo '<p><label>Сколько будет ' . $num1 . ' + ' . $num2 . '?<br /><input type="text" name="wpengine_captcha" required /></label></p>';
}
add_action('register_form', 'wpengine_add_captcha_field');

function wpengine_check_captcha($login, $email, $errors) {
    session_start();
    if (empty($_POST['wpengine_captcha']) || intval($_POST['wpengine_captcha']) !== $_SESSION['wpengine_captcha_answer']) {
        $errors->add('captcha_error', __('Неверный ответ на вопрос капчи.')); 
    }
}
add_action('register_post', 'wpengine_check_captcha', 10, 3);

Обратите внимание, что для работы сессий нужно убедиться, что они стартуют корректно. Лучше использовать готовые решения, если нет опыта.

Ограничение регистрации по времени

Если необходимо разрешить регистрацию только в определённые часы, например, с 9 до 18, можно добавить такую проверку:

function wpengine_limit_registration_time($user_login, $user_email, $errors) {
    $current_hour = (int) current_time('H');
    $start = 9; // Начало разрешенного времени
    $end = 18;  // Конец разрешенного времени

    if ($current_hour < $start || $current_hour > $end) {
        $errors->add('registration_time_restricted', __('Регистрация возможна только с 9:00 до 18:00. Попробуйте позже.'));
    }
}
add_action('register_post', 'wpengine_limit_registration_time', 10, 3);

Это полезно для сайтов с ограниченным временем работы поддержки или для проведения акций.

Плагины для ограничения регистрации

Если не хочется писать код, можно использовать готовые плагины, которые поддерживают различные ограничения:

  • Restrict User Signups — позволяет ограничивать регистрацию по доменам email и количеству;
  • Stop Spammers — комплексная защита от спама при регистрации;
  • Limit Login Attempts Reloaded — ограничивает попытки входа, но может помочь и с регистрацией.

Для интеграции с WPengine и автоматизации можно использовать также плагины из магазина WPSHOP, например, My Popup для вывода сообщений при попытке регистрации вне разрешённого времени.

Объединение нескольких ограничений

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

Пример объединённой проверки:

function wpengine_combined_registration_checks($user_login, $user_email, $errors) {
    // Ограничение по времени
    $current_hour = (int) current_time('H');
    if ($current_hour < 9 || $current_hour > 18) {
        $errors->add('registration_time_restricted', __('Регистрация возможна только с 9:00 до 18:00.'));
    }

    // Ограничение по домену
    $allowed_domains = array('example.com');
    $email_domain = substr(strrchr($user_email, '@'), 1);
    if (!in_array($email_domain, $allowed_domains)) {
        $errors->add('email_domain_restricted', __('Регистрация разрешена только для домена example.com')); 
    }

    // Капча
    session_start();
    if (empty($_POST['wpengine_captcha']) || intval($_POST['wpengine_captcha']) !== $_SESSION['wpengine_captcha_answer']) {
        $errors->add('captcha_error', __('Неверный ответ на капчу.')); 
    }

    // Ограничение по количеству регистраций за сутки
    global $wpdb;
    $limit = 10;
    $time_24h_ago = date('Y-m-d H:i:s', strtotime('-24 hours'));
    $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE user_registered >= %s", $time_24h_ago));
    if ($count >= $limit) {
        $errors->add('registration_limit_reached', __('Превышен лимит регистрации за сутки.')); 
    }
}
add_action('register_post', 'wpengine_combined_registration_checks', 10, 3);

Выводы

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

Если хотите автоматизировать управление регистрацией и другими процессами на WPengine, советуем ознакомиться с My Popup и другими полезными плагинами из каталога WPSHOP.

Как отслеживать и отвечать на ошибки PHP в WordPress
06.12.2025
Как использовать REST API в WordPress для создания плагинов
25.11.2025
Как автоматизировать удаление спама в комментариях WordPress
11.12.2025
WooCommerce: решение проблемы не работающих вариативных атрибутов в описании товара
19.04.2026
WooCommerce: решение проблем с автоматическим удалением товаров без заказов
28.05.2026