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

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

Почему важно ограничивать количество регистраций

Часто сайты WordPress сталкиваются с проблемой массовых регистраций ботов или злоумышленников, что приводит к:

  • засорению базы данных ненужными аккаунтами;
  • перегрузке сервера;
  • возможным угрозам безопасности;
  • искажению статистики.

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

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

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

1. WP Limit Login Attempts

Хотя этот плагин в основном ограничивает попытки входа, он также позволяет контролировать регистрации с определённого IP-адреса.

Ссылка на плагин

2. Registration Limits

Этот плагин даёт возможность настроить максимальное количество регистраций за временной промежуток, например, за час или день.

Плагин простой в использовании и подходит для большинства задач.

Скачать Registration Limits на WPSHOP

3. Clearfy Pro

Clearfy Pro — мощный оптимизатор и средство безопасности, в котором есть функции ограничения регистраций и защиты от спама.

Имеет множество настроек и интегрируется с другими сервисами.

Подробнее о Clearfy Pro

Кастомное решение на PHP для ограничения регистраций

Если вы хотите уникальную логику, можно реализовать ограничение регистраций через код. Рассмотрим пример, который ограничит регистрации с одного IP не более 3 раз в час.

Создаём таблицу для хранения регистраций

Для начала создадим таблицу в базе данных, которая будет хранить IP и время регистрации:

function wptemp_create_registration_limit_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptemp_registration_limits';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        ip VARCHAR(100) NOT NULL,
        registration_time DATETIME NOT NULL,
        PRIMARY KEY  (id),
        INDEX ip_idx (ip),
        INDEX reg_time_idx (registration_time)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wptemp_create_registration_limit_table');

Проверка и запись регистрации

Далее при попытке регистрации проверяем количество регистраций с IP за последний час:

function wptemp_limit_registrations_by_ip( $user_login, $user_email, $errors ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptemp_registration_limits';
    $ip = $_SERVER['REMOTE_ADDR'];
    $time_limit = date('Y-m-d H:i:s', strtotime('-1 hour'));

    // Количество регистраций с IP за последний час
    $count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $table_name WHERE ip = %s AND registration_time > %s",
        $ip, $time_limit
    ));

    if ( $count >= 3 ) {
        $errors->add('registration_limit_exceeded', __('Превышено максимальное число регистраций с вашего IP. Попробуйте позже.'));
    }
}
add_action('register_post', 'wptemp_limit_registrations_by_ip', 10, 3);

function wptemp_log_registration( $user_id ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptemp_registration_limits';
    $ip = $_SERVER['REMOTE_ADDR'];
    $wpdb->insert( $table_name, [
        'ip' => $ip,
        'registration_time' => current_time('mysql')
    ]);
}
add_action('user_register', 'wptemp_log_registration');

Расширение функционала: Ограничение по email-домену и верификация

Помимо ограничения по IP, иногда полезно ограничить регистрации по домену email или добавить капчу. Для этого можно использовать плагины, например, reCAPTCHA или Advanced noCaptcha & invisible Captcha.

Также можно добавить проверку домена email на этапе регистрации:

function wptemp_restrict_email_domain( $user_login, $user_email, $errors ) {
    $allowed_domains = ['example.com', 'mysite.ru']; // разрешённые домены
    $email_domain = substr(strrchr($user_email, "@"), 1);

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

Практические советы и рекомендации

  • Всегда проверяйте, чтобы ваша таблица для логов регистраций очищалась автоматически — например, удаляйте записи старше 24 часов, чтобы база не разрасталась.
  • Комбинируйте ограничения: IP + email + капча для лучшей защиты.
  • Используйте плагин Clearfy Pro для комплексной защиты и оптимизации сайта, особенно если нужны дополнительные возможности безопасности.
  • Регулярно обновляйте плагины и ядро WordPress, чтобы избежать уязвимостей.
  • Тестируйте ограничения на тестовом сайте перед применением на боевом.

Заключение и полезные ссылки

Ограничение количества регистраций — важная и выполнимая задача. Используйте описанные методы и плагины для контроля регистраций и защиты сайта от спама.

Полезные ресурсы:

Как использовать WP REST API для создания простого плагина в WordPress
12.02.2026
Как использовать WP-CLI для управления темами и плагинами WordPress
29.01.2026
Как установить и настроить ограничение числа регистраций в WordPress
04.02.2026
Как настроить автоматическую загрузку библиотек в WordPress для ускорения разработки
13.12.2025
Как создать и использовать шорткоды в WordPress
05.11.2025