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

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

Отключение регистрации через стандартные настройки WordPress

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

  • Перейти в Консоль WordPress → Настройки → Общие.
  • Найти опцию Любой может зарегистрироваться и убрать галочку.

После этого форма регистрации и ссылки на нее перестанут работать, и новые пользователи не смогут зарегистрироваться через стандартные механизмы.

Однако этот способ не всегда 100% надежен, так как плагины или кастомные формы могут предоставлять регистрацию иначе. Поэтому рассмотрим более надежные методы.

Запрет регистрации с помощью фильтра в functions.php

Если вы хотите контролировать регистрацию программно, можно использовать фильтр wp_registration_url или перехватывать запросы регистрации и блокировать их.

Пример функции, которая отключит регистрацию полностью, возвращая ошибку при попытке зарегистрироваться:

function wpapp_disable_user_registration() {
    if (isset($_GET['action']) && $_GET['action'] === 'register') {
        wp_die('Регистрация пользователей временно отключена.');
    }
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['user_login'])) {
        wp_die('Регистрация пользователей временно отключена.');
    }
}
add_action('init', 'wpapp_disable_user_registration');

Эта функция проверяет, пытается ли пользователь открыть страницу регистрации или отправить форму регистрации, и при этом показывает сообщение об отключении.

Преимущества метода

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

Недостатки

  • Требует базового понимания PHP и WordPress API.
  • Не блокирует регистрацию через REST API или внешние методы без дополнительного кода.

Блокировка регистрации через REST API и XML-RPC

Современные сайты часто используют REST API для регистрации. Чтобы полностью закрыть регистрацию, нужно заблокировать и эти методы.

Пример кода, который отключает регистрацию через REST API и XML-RPC:

function wpapp_block_rest_registration($result, $server, $request) {
    if (get_option('users_can_register')) {
        return $result; // Если регистрация разрешена, пропускаем
    }
    return new WP_Error(
        'rest_registration_disabled',
        __('Регистрация пользователей отключена.'),
        array('status' => 403)
    );
}
add_filter('rest_pre_dispatch', function($response, $server, $request) {
    if ($request->get_route() === '/wp/v2/users/register') {
        return wpapp_block_rest_registration($response, $server, $request);
    }
    return $response;
}, 10, 3);

function wpapp_disable_xmlrpc_registration($methods) {
    if (isset($methods['wp.newUser'])) {
        unset($methods['wp.newUser']);
    }
    return $methods;
}
add_filter('xmlrpc_methods', 'wpapp_disable_xmlrpc_registration');

Этот код предотвращает регистрацию через REST API endpoint /wp/v2/users/register и отключает метод wp.newUser в XML-RPC.

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

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

  • Disable User Registration — простой плагин для полного отключения регистрации без настроек.
  • WP Cerber Security — комплексный плагин безопасности с возможностью блокировать регистрацию спамеров и нежелательных пользователей.
  • Clearfy Pro — плагин оптимизации и безопасности, который позволяет отключать регистрацию и закрывать REST API.

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

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

Иногда нужно не полностью запретить регистрацию, а разрешить ее лишь ограниченному кругу лиц — например, по приглашению или с определенным кодом.

Для этого можно использовать фильтр registration_errors, проверяя введенный пользователем код приглашения:

function wpapp_restrict_registration_by_invite_code($errors, $sanitized_user_login, $user_email) {
    if (empty($_POST['invite_code']) || $_POST['invite_code'] !== 'SECRET123') {
        $errors->add('invite_code_error', __('Для регистрации требуется правильный код приглашения.'));
    }
    return $errors;
}
add_filter('registration_errors', 'wpapp_restrict_registration_by_invite_code', 10, 3);

Также нужно добавить поле ввода кода приглашения на страницу регистрации. Для этого можно использовать хук register_form:

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

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

Итоги и рекомендации

Запрет регистрации на сайте WordPress — частая задача, которую можно решить разными способами:

  • Отключить в настройках сайта — самый простой вариант.
  • Добавить кастомный код для надежной блокировки стандартных и нестандартных методов регистрации.
  • Блокировать REST API и XML-RPC регистрацию для защиты от обходов.
  • Использовать плагины, например, Clearfy Pro, для удобного управления регистрацией и безопасностью.
  • Если нужна ограниченная регистрация, добавлять проверку кодов приглашения через хуки и кастомные поля.

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

Наш каталог плагинов WordPress