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

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

Почему стоит отключать регистрацию без плагинов

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

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

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

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

Стандартный способ отключения регистрации — в админке: Настройки > Общие > Снятие галочки с «Разрешить регистрацию пользователей». Но что если нужно программно запретить регистрацию, например, при определенных условиях, или полностью убрать возможность регистрации?

Отключение регистрации через фильтр wphost_disable_user_registration

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

add_action('init', 'wphost_disable_user_registration');
function wphost_disable_user_registration() {
    if (isset($_GET['action']) && $_GET['action'] === 'register') {
        wp_redirect(home_url());
        exit;
    }
}

Этот код перенаправляет всех пользователей, которые пытаются попасть на страницу регистрации wp-login.php?action=register, на главную страницу сайта. Это простой способ запретить регистрацию через стандартную форму.

Отключение регистрации в REST API

Если на сайте используется REST API для регистрации пользователей, стоит заблокировать соответствующие эндпоинты. Для этого добавим фильтр на регистрацию пользователей через REST:

add_filter('rest_endpoints', 'wphost_disable_rest_registration');
function wphost_disable_rest_registration($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    return $endpoints;
}

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

Изменение формы регистрации и добавление кастомных полей без плагинов

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

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

Для добавления нового поля, например, «Никнейм пользователя», используем хук register_form:

add_action('register_form', 'wphost_add_custom_register_field');
function wphost_add_custom_register_field() {
    $nickname = isset($_POST['nickname']) ? esc_attr($_POST['nickname']) : '';
    echo '<p><label for="nickname">Никнейм<br/><input type="text" name="nickname" id="nickname" class="input" value="' . $nickname . '" size="25" /></label></p>';
}

Этот код добавляет текстовое поле «Никнейм» на страницу регистрации.

Валидация нового поля

Чтобы проверить введенные данные и показать ошибку, используем хук registration_errors:

add_filter('registration_errors', 'wphost_validate_custom_register_field', 10, 3);
function wphost_validate_custom_register_field($errors, $sanitized_user_login, $user_email) {
    if (empty($_POST['nickname']) || strlen($_POST['nickname']) < 3) {
        $errors->add('nickname_error', '<strong>ОШИБКА</strong>: Никнейм должен содержать не менее 3 символов.');
    }
    return $errors;
}

Если никнейм не введен или слишком короткий, пользователь увидит ошибку.

Сохранение кастомного поля при регистрации

Чтобы сохранить никнейм в пользовательские метаданные, используем хук user_register:

add_action('user_register', 'wphost_save_custom_register_field');
function wphost_save_custom_register_field($user_id) {
    if (!empty($_POST['nickname'])) {
        update_user_meta($user_id, 'nickname', sanitize_text_field($_POST['nickname']));
    }
}

Теперь при регистрации никнейм будет сохраняться в базе.

Как удалить пользователя программно через код

Иногда требуется массово удалить пользователей или удалить пользователя по определенному критерию. Сделать это можно с помощью функции wp_delete_user(). Ниже пример удаления всех пользователей, у которых никнейм пустой:

function wphost_delete_users_without_nickname() {
    $args = [
        'meta_key' => 'nickname',
        'meta_value' => '',
        'meta_compare' => 'NOT EXISTS',
        'fields' => 'ID',
        'number' => 100
    ];
    $user_query = new WP_User_Query($args);
    if (!empty($user_query->get_results())) {
        foreach ($user_query->get_results() as $user_id) {
            wp_delete_user($user_id);
        }
    }
}

Такой подход позволяет чистить базу пользователей без плагинов.

Пример решения: кастомный скрипт отключения регистрации и добавления поля «Откуда узнали о нас»

Объединим все вместе: отключим регистрацию с фронтенда, но позволим регистрацию через кастомную форму, где будет дополнительное поле «Откуда узнали о нас».

add_action('init', 'wphost_redirect_default_registration');
function wphost_redirect_default_registration() {
    if (isset($_GET['action']) && $_GET['action'] === 'register') {
        wp_redirect(home_url('/custom-register/'));
        exit;
    }
}

add_shortcode('wphost_custom_register', 'wphost_custom_register_shortcode');
function wphost_custom_register_shortcode() {
    if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['wphost_register_nonce']) && wp_verify_nonce($_POST['wphost_register_nonce'], 'wphost_register_action')) {
        $errors = new WP_Error();

        $user_login = sanitize_user($_POST['user_login']);
        $user_email = sanitize_email($_POST['user_email']);
        $source_info = sanitize_text_field($_POST['source_info']);

        if (empty($user_login) || strlen($user_login) < 4) {
            $errors->add('user_login', 'Логин должен содержать не менее 4 символов.');
        }
        if (!is_email($user_email)) {
            $errors->add('user_email', 'Введите корректный email.');
        }
        if (username_exists($user_login) || email_exists($user_email)) {
            $errors->add('user_exists', 'Пользователь с таким логином или email уже существует.');
        }

        if (empty($errors->errors)) {
            $password = wp_generate_password(12, false);
            $user_id = wp_create_user($user_login, $password, $user_email);
            if (!is_wp_error($user_id)) {
                update_user_meta($user_id, 'source_info', $source_info);

                wp_new_user_notification($user_id, null, 'user');
                echo '<p>Регистрация прошла успешно. Пароль отправлен на ваш email.</p>';
                return;
            } else {
                echo '<p>Ошибка при создании пользователя.</p>';
            }
        } else {
            foreach ($errors->get_error_messages() as $err) {
                echo '<p style="color:red;">' . esc_html($err) . '</p>';
            }
        }
    }

    ob_start();
    ?>
    <form method="POST">
        <p><label>Логин<br><input type="text" name="user_login" required></label></p>
        <p><label>Email<br><input type="email" name="user_email" required></label></p>
        <p><label>Откуда узнали о нас<br><input type="text" name="source_info"></label></p>
        <p><input type="hidden" name="wphost_register_nonce" value="<?php echo wp_create_nonce('wphost_register_action'); ?>"></p>
        <p><input type="submit" value="Зарегистрироваться"></p>
    </form>
    <?php
    return ob_get_clean();
}

Вы можете вставить шорткод [wphost_custom_register] на любую страницу, чтобы вывести кастомную форму регистрации с дополнительным полем и защитой nonce.

Заключение

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

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

Как изменить адрес авторской страницы в WordPress без плагинов
20.12.2025
Автоматическое изменение стоимости товаров в WooCommerce по заданным условиям
04.05.2026
Как решить проблему удаленного соединения с базой данных WordPress
09.12.2025
Как создать автоматическое удаление старых записей в WordPress по дате
24.01.2026
Как изменить функциональность формы регистрации WordPress без плагинов
16.12.2025