Как создать собственный вид регистрации в WordPress с примерами кода

Почему стандартная регистрация WordPress часто не подходит

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

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

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

Создание собственного вида регистрации: с чего начать

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

  • Создать шорткод, который будет выводить кастомную форму регистрации.
  • Обработать отправку формы через безопасный механизм, например, через AJAX или стандартный POST с nonce.
  • Валидация и проверка данных, включая обязательные поля и уникальность логина/email.
  • Создание пользователя с помощью функции wp_create_user или wp_insert_user.
  • Добавление дополнительных полей в профиль пользователя (если нужно).
  • Отправка уведомлений и редирект после успешной регистрации.

Мы рассмотрим каждый шаг с примером кода.

Реализация кастомной формы регистрации через шорткод

Начнем с создания простого шорткода, который выводит HTML-форму регистрации. В файле functions.php вашей темы или в собственном плагине добавьте следующий код:

function wporder_custom_registration_form() {
    if (is_user_logged_in()) {
        return '<p>Вы уже зарегистрированы и авторизованы.</p>';
    }
    
    $output = '';
    $output .= '<form method="post" action="" id="wporder-registration-form">';
    $output .= '<p><label for="wporder_user_login">Логин пользователя (обязательно)</label><br>';
    $output .= '<input type="text" name="wporder_user_login" id="wporder_user_login" required /></p>';
    $output .= '<p><label for="wporder_user_email">Email (обязательно)</label><br>';
    $output .= '<input type="email" name="wporder_user_email" id="wporder_user_email" required /></p>';
    $output .= '<p><label for="wporder_user_pass">Пароль (обязательно)</label><br>';
    $output .= '<input type="password" name="wporder_user_pass" id="wporder_user_pass" required /></p>';
    $output .= wp_nonce_field('wporder_register_action', 'wporder_register_nonce', true, false);
    $output .= '<p><input type="submit" name="wporder_register_submit" value="Зарегистрироваться" /></p>';
    $output .= '</form>';
    
    return $output;
}
add_shortcode('wporder_registration', 'wporder_custom_registration_form');

Теперь вы можете вставить шорткод [wporder_registration] в любую страницу, чтобы вывести форму регистрации.

Обработка данных формы и валидация

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

function wporder_handle_registration() {
    if (isset($_POST['wporder_register_submit'])) {
        if (!isset($_POST['wporder_register_nonce']) || !wp_verify_nonce($_POST['wporder_register_nonce'], 'wporder_register_action')) {
            wp_die('Ошибка безопасности. Попробуйте еще раз.');
        }

        $user_login = sanitize_user($_POST['wporder_user_login']);
        $user_email = sanitize_email($_POST['wporder_user_email']);
        $user_pass = $_POST['wporder_user_pass'];

        $errors = new WP_Error();

        if (empty($user_login) || empty($user_email) || empty($user_pass)) {
            $errors->add('field', 'Все поля обязательны для заполнения.');
        }

        if (!validate_username($user_login)) {
            $errors->add('username_invalid', 'Логин содержит недопустимые символы.');
        }

        if (username_exists($user_login)) {
            $errors->add('username_exists', 'Такой логин уже занят.');
        }

        if (!is_email($user_email)) {
            $errors->add('email_invalid', 'Неверный формат email.');
        }

        if (email_exists($user_email)) {
            $errors->add('email_exists', 'Этот email уже зарегистрирован.');
        }

        if (strlen($user_pass) < 6) {
            $errors->add('password_length', 'Пароль должен быть не менее 6 символов.');
        }

        if (empty($errors->errors)) {
            $user_id = wp_create_user($user_login, $user_pass, $user_email);
            if (is_wp_error($user_id)) {
                $errors->add('register_failed', 'Ошибка при создании пользователя.');
            } else {
                wp_new_user_notification($user_id, null, 'user');
                wp_redirect(home_url('/registration-success/'));
                exit;
            }
        }

        // Вывести ошибки пользователю
        foreach ($errors->get_error_messages() as $error) {
            echo '<div class="wporder-error" style="color:red;">' . esc_html($error) . '</div>';
        }
    }
}
add_action('init', 'wporder_handle_registration');

Этот код проверяет nonce, валидирует поля, проверяет уникальность логина и email, создает пользователя и перенаправляет на страницу успеха.

Добавление дополнительных полей к регистрации

Если нужно добавить, например, поле «Номер телефона», расширьте форму:

$output .= '<p><label for="wporder_user_phone">Номер телефона</label><br>';
$output .= '<input type="text" name="wporder_user_phone" id="wporder_user_phone" /></p>';

И в обработке добавьте сохранение этого поля в метаданные пользователя:

if (!empty($_POST['wporder_user_phone'])) {
    update_user_meta($user_id, 'wporder_user_phone', sanitize_text_field($_POST['wporder_user_phone']));
}
<

Так можно расширять форму любыми необходимыми полями.

Плагины для кастомной регистрации в WordPress

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

  • WP User Manager — удобный плагин с возможностью создавать собственные формы и настраивать поля.
  • User Registration
  • Ultimate Member — мощный плагин для управления пользователями и создания профилей с расширенной функциональностью.

Выбор плагина зависит от ваших задач и степени кастомизации.

Советы по безопасности кастомной регистрации

При создании собственной формы регистрации важно учитывать следующие моменты безопасности:

  • Обязательно использовать wp_nonce_field и проверять nonce для защиты от CSRF.
  • Тщательно валидировать и санитизировать все пользовательские данные.
  • Использовать функции WordPress для создания пользователей, чтобы правильно обработать пароли и роли.
  • Ограничить количество попыток регистрации, чтобы избежать спама.
  • Рассмотреть добавление капчи (например, Google reCAPTCHA) для повышения защиты.

Следуя этим рекомендациям, вы создадите надежный и удобный интерфейс регистрации.

WooCommerce: автоматическое удаление отсутствующих товаров из каталога
15.06.2026
Автоматическое создание и отправка push-уведомлений при изменении заказов WordPress
26.12.2025
WooCommerce: как использовать хуки для добавления собственного контента в страницу заказа
25.04.2026
Как создать автоматический отчет по аналитике заказов в WordPress
10.01.2026
WooCommerce: автоматическое отключение отправки писем после отмены заказа
14.07.2026