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

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

Почему нужны ограничения регистрации в WordPress

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

  • Запретить регистрацию с временных или публичных email-адресов;
  • Разрешить регистрацию только с корпоративных или определённых доменов;
  • Добавить дополнительную защиту с помощью капчи или приглашений;
  • Отфильтровать злоумышленников по IP или user agent;
  • Автоматизировать проверку и модерацию новых регистраций.

Рассмотрим разные подходы с примерами кода и плагинами.

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

Одним из самых популярных способов ограничения является фильтрация email по домену. Например, разрешить регистрацию только с корпоративных адресов @example.com.

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

function wporg_restrict_registration_email_domains( $errors, $sanitized_user_login, $user_email ) {
    $allowed_domains = array('example.com', 'wporg.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', 'wporg_restrict_registration_email_domains', 10, 3 );

Этот код проверит адрес и не позволит зарегистрироваться пользователям с другими доменами. Можно легко расширить список или сделать его настраиваемым через опции плагина.

Плагины для ограничения по email

Если хотите готовое решение с интерфейсом, обратите внимание на плагин Restrict User Signups. Он позволяет настроить список разрешённых доменов, блокировать временные почты и управлять регистрацией.

Добавление капчи на страницу регистрации

Капча — отличный метод борьбы со спам-ботами, которые регистрируются автоматически. Можно использовать Google reCAPTCHA или другие сервисы.

Для интеграции reCAPTCHA v2 на страницу регистрации добавим следующий код:

function wporg_add_recaptcha_to_registration() {
    ?>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <div class="g-recaptcha" data-sitekey="ВАШ_SITE_KEY"></div>
    <?php
}
add_action( 'register_form', 'wporg_add_recaptcha_to_registration' );

function wporg_verify_recaptcha_on_registration( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['g-recaptcha-response'] ) || ! wporg_recaptcha_verify( $_POST['g-recaptcha-response'] ) ) {
        $errors->add( 'recaptcha_error', 'Пожалуйста, подтвердите, что вы не робот.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wporg_verify_recaptcha_on_registration', 10, 3 );

function wporg_recaptcha_verify( $response ) {
    $secret = 'ВАШ_SECRET_KEY';
    $remoteip = $_SERVER['REMOTE_ADDR'];
    $verify = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array(
        'body' => array(
            'secret' => $secret,
            'response' => $response,
            'remoteip' => $remoteip
        )
    ) );
    $json = json_decode( wp_remote_retrieve_body( $verify ) );
    return $json->success;
}

После настройки ключей Google reCAPTCHA и добавления этого кода на сайт регистрация будет защищена от ботов.

Плагин с капчей на регистрацию

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

Блокировка регистрации по IP и геолокации

Если на сайт приходят нежелательные пользователи из определённых IP-адресов или регионов, стоит применить блокировки.

Пример кода для блокировки по IP:

function wporg_block_registration_by_ip( $errors, $sanitized_user_login, $user_email ) {
    $blocked_ips = array('123.456.789.0', '111.222.333.444');
    $user_ip = $_SERVER['REMOTE_ADDR'];

    if ( in_array( $user_ip, $blocked_ips ) ) {
        $errors->add( 'ip_blocked', 'Регистрация с вашего IP-адреса запрещена.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wporg_block_registration_by_ip', 10, 3 );

Для геоблокировки можно интегрировать API определения геолокации и блокировать регионы, откуда не желательны пользователи.

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

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

Пример простой проверки приглашения:

function wporg_check_invitation_code( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['invitation_code'] ) || $_POST['invitation_code'] !== 'MY_SECRET_CODE' ) {
        $errors->add( 'invitation_error', 'Для регистрации необходим действующий код приглашения.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wporg_check_invitation_code', 10, 3 );

function wporg_add_invitation_field() {
    ?>
    <p>
        <label for="invitation_code">Код приглашения<br />
        <input type="text" name="invitation_code" id="invitation_code" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['invitation_code'] ?? '' ) ); ?>" size="25" /></label>
    </p>
    <?php
}
add_action( 'register_form', 'wporg_add_invitation_field' );

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

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

Подытожим полезные инструменты и советы:

  • Clearfy Pro — комплексная защита регистрации с капчей, ограничениями по IP и email, оптимизацией безопасности. Отличное решение для тех, кто хочет получить всё в одном плагине. Подробнее — на сайте.
  • Restrict User Signups — бесплатный плагин для ограничения регистрации по email доменам.
  • WPBruiser — плагин, который добавляет защиту от спама без капчи, используя скрытые поля и другие методы.
  • Используйте собственные хуки registration_errors и register_form для гибкой настройки и добавления своих проверок.
  • Регулярно проверяйте логи регистраций, чтобы выявлять подозрительную активность.

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

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