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

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

Почему важно использовать уникальные поля с подтверждением

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

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

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

Для начала нам нужно добавить поле ввода «Номер телефона» в стандартную форму регистрации. Сделаем это с помощью хука register_form. Пример функции wpbloger_add_phone_field_register_form:

function wpbloger_add_phone_field_register_form() {
    $phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( wp_unslash( $_POST['phone'] ) ) : '';
    ?>
    <p>
        <label for="phone">Номер телефона (уникальный)<br />
            <input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
    </p>
    <?php
}
add_action( 'register_form', 'wpbloger_add_phone_field_register_form' );

Данная функция добавит поле на страницу регистрации. Обязательно используем sanitize_text_field и esc_attr для безопасности.

Проверка уникальности и валидация поля

Теперь требуется проверить, что введённый номер телефона уникален и соответствует нужному формату. Для этого воспользуемся хуком registration_errors. Функция wpbloger_validate_phone_field:

function wpbloger_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['phone'] ) ) {
        $errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите номер телефона.' );
    } else {
        $phone = sanitize_text_field( wp_unslash( $_POST['phone'] ) );
        // Проверка формата (пример: только цифры и длина 10-15)
        if ( ! preg_match( '/^\d{10,15}$/', $phone ) ) {
            $errors->add( 'phone_error', '<strong>Ошибка</strong>: Неверный формат номера телефона.' );
        } else {
            // Проверяем уникальность
            $user_query = new WP_User_Query( array(
                'meta_key' => 'phone',
                'meta_value' => $phone,
                'number' => 1,
                'count_total' => false,
            ) );
            if ( ! empty( $user_query->results ) ) {
                $errors->add( 'phone_error', '<strong>Ошибка</strong>: Этот номер телефона уже зарегистрирован.' );
            }
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpbloger_validate_phone_field', 10, 3 );

Таким образом, мы убедимся, что телефон введён корректно и ещё не используется другим пользователем.

Сохраняем поле в профиль пользователя

После успешной регистрации нужно сохранить номер телефона в метаданные пользователя. Сделаем это через хук user_register в функции wpbloger_save_phone_user_meta:

function wpbloger_save_phone_user_meta( $user_id ) {
    if ( ! empty( $_POST['phone'] ) ) {
        $phone = sanitize_text_field( wp_unslash( $_POST['phone'] ) );
        update_user_meta( $user_id, 'phone', $phone );
    }
}
add_action( 'user_register', 'wpbloger_save_phone_user_meta' );

Добавление подтверждения номера телефона через SMS

Для подтверждения номера телефона можно использовать сторонние API SMS-рассылок, например, Twilio, SMS.ru, или отечественные аналоги. Логика такая:

  • После отправки формы регистрации создать временную запись с кодом подтверждения и номером телефона.
  • Отправить пользователю SMS с кодом.
  • Предоставить страницу или форму ввода кода подтверждения.
  • При успешном вводе активировать учётную запись или подтвердить номер.

Рассмотрим базовый пример отправки кода и проверки:

Отправка кода и сохранение во временную опцию

function wpbloger_send_phone_confirmation_code( $user_id ) {
    $phone = get_user_meta( $user_id, 'phone', true );
    if ( ! $phone ) {
        return;
    }
    $code = wp_rand( 100000, 999999 );
    update_user_meta( $user_id, 'phone_confirmation_code', $code );
    update_user_meta( $user_id, 'phone_confirmed', 0 );
    // Здесь вызываем API SMS
    // Пример для SMS.ru (заменить на реальный вызов):
    // wpbloger_send_sms( $phone, "Ваш код подтверждения: $code" );
}
add_action( 'user_register', 'wpbloger_send_phone_confirmation_code' );

Проверка кода подтверждения

Создайте на сайте страницу с формой для ввода кода подтверждения. При отправке формы проверяйте код:

function wpbloger_check_phone_confirmation_code( $user_id, $input_code ) {
    $saved_code = get_user_meta( $user_id, 'phone_confirmation_code', true );
    if ( $saved_code && $saved_code === $input_code ) {
        update_user_meta( $user_id, 'phone_confirmed', 1 );
        delete_user_meta( $user_id, 'phone_confirmation_code' );
        return true;
    }
    return false;
}

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

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

Для автоматизации создания сообщений и шаблонов SMS можно использовать плагин WPGPT. Он поможет создавать уникальные и грамотно сформулированные тексты для подтверждения, уведомлений и прочих коммуникаций с пользователями.

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

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

Для полноценного внедрения потребуется доработка интерфейса подтверждения и интеграция с SMS-шлюзом. Также рекомендуем внимательно протестировать все этапы регистрации и валидации.

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

Оптимизация загрузки картинок в WordPress: практические методы
26.11.2025
Как создать и использовать REST API эндпоинты в WordPress
26.12.2025
Добавить уникальные поля в формы регистрации WordPress с подтверждением
21.02.2026
Как создать собственный шорткод в WordPress
02.11.2025
Как создать собственный виджет WordPress: пошаговое руководство
20.11.2025