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

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

Почему важно добавить поле телефона и подтверждение SMS

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

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

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

Для начала нужно расширить форму регистрации, добавив новое поле. Это делается с помощью хуков WordPress:

function wpkit_add_phone_field() {
    ?>
    <p>
        <label for="phone">Телефон (обязательно)</label><br>
        <input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['phone'] ?? '' ) ); ?>" size="25" />
    </p>
    <?php
}
add_action( 'register_form', 'wpkit_add_phone_field' );

Этот код добавит поле «Телефон» на страницу регистрации. Обратите внимание, что мы сразу выводим введённое значение обратно, чтобы при ошибке пользователь не потерял введённые данные.

Проверка и валидация поля телефона

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

function wpkit_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['phone'] ) ) {
        $errors->add( 'phone_error', '<strong>Ошибка:</strong> Пожалуйста, введите корректный номер телефона в международном формате.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpkit_validate_phone_field', 10, 3 );

Здесь регулярное выражение проверяет, что номер состоит из 10–15 цифр и может начинаться с плюса. Вы можете адаптировать паттерн под нужный формат телефона.

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

Чтобы сохранить номер телефона, добавим обработчик на событие user_register:

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

Теперь номер будет храниться в мета данных пользователя под ключом phone.

Реализация подтверждения телефона через SMS

Для подтверждения телефона понадобится интеграция с SMS-сервисом, например, Twilio, SMS.ru или другой. В этой статье рассмотрим пример с SMS.ru, так как он популярен в России и имеет простой API.

Регистрация и получение API-ключа SMS.ru

Зарегистрируйтесь на https://sms.ru/ и получите API-ключ для отправки сообщений. В дальнейшем используйте этот ключ в запросах.

Отправка кода подтверждения при регистрации

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

function wpkit_send_sms_confirmation_code( $user_id ) {
    $phone = get_user_meta( $user_id, 'phone', true );
    if ( ! $phone ) return;

    $code = rand( 100000, 999999 );
    update_user_meta( $user_id, 'phone_confirmation_code', $code );
    update_user_meta( $user_id, 'phone_confirmed', 0 );

    $api_key = 'ВАШ_API_КЛЮЧ_SMSRU';
    $message = "Ваш код подтверждения на сайте: $code";
    $url = "https://sms.ru/sms/send?api_id=$api_key&to=" . urlencode( $phone ) . "&msg=" . urlencode( $message ) . "&json=1";

    wp_remote_get( $url );
}
add_action( 'user_register', 'wpkit_send_sms_confirmation_code' );

Этот код автоматически отправит SMS с кодом подтверждения после регистрации.

Создание формы ввода кода подтверждения

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

function wpkit_phone_confirmation_form() {
    if ( ! is_user_logged_in() ) {
        echo '<p>Пожалуйста, войдите для подтверждения телефона.</p>';
        return;
    }

    if ( isset( $_POST['wpkit_confirm_code'] ) ) {
        $user_id = get_current_user_id();
        $saved_code = get_user_meta( $user_id, 'phone_confirmation_code', true );
        $input_code = sanitize_text_field( $_POST['wpkit_confirm_code'] );

        if ( $input_code === $saved_code ) {
            update_user_meta( $user_id, 'phone_confirmed', 1 );
            delete_user_meta( $user_id, 'phone_confirmation_code' );
            echo '<p>Телефон успешно подтверждён!</p>';
        } else {
            echo '<p style="color:red;">Неверный код подтверждения.</p>';
        }
    }

    ?>
    <form method="post">
        <label for="wpkit_confirm_code">Введите код подтверждения</label><br>
        <input type="text" name="wpkit_confirm_code" id="wpkit_confirm_code" required /><br>
        <input type="submit" value="Подтвердить" />
    </form>
    <?php
}

// Для вывода формы можно использовать шорткод
add_shortcode( 'wpkit_phone_confirm', 'wpkit_phone_confirmation_form' );

Добавьте на страницу шорткод [wpkit_phone_confirm], чтобы пользователь мог ввести код и подтвердить номер.

Проверка подтверждения телефона при авторизации

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

function wpkit_check_phone_confirmation_on_login( $user, $username, $password ) {
    if ( is_wp_error( $user ) || ! $user ) {
        return $user;
    }

    $phone_confirmed = get_user_meta( $user->ID, 'phone_confirmed', true );
    if ( ! $phone_confirmed ) {
        return new WP_Error( 'phone_not_confirmed', '<strong>Ошибка:</strong> Ваш телефон не подтверждён. Пожалуйста, подтвердите номер.' );
    }

    return $user;
}
add_filter( 'authenticate', 'wpkit_check_phone_confirmation_on_login', 30, 3 );

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

Советы по безопасности и удобству

  • Храните коды подтверждения в базе с ограничением по времени (например, удаляйте через 15 минут), чтобы снизить риск утечки.
  • Используйте безопасное подключение (HTTPS) для всех страниц с регистрацией и подтверждением.
  • Реализуйте повторную отправку кода с ограничением по времени, чтобы избежать спама.
  • Показывайте пользователю подсказки по формату номера телефона и подтверждению.

Заключение

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

Если вы используете плагин Expert Review, можно дополнительно анализировать качество регистраций и поведение пользователей, чтобы повысить безопасность.

WooCommerce: как заблокировать оплату при наличии товаров с определёнными атрибутами в корзине
22.05.2026
Как добавить дополнительное поле в форму регистрации WordPress с помощью кода
15.12.2025
Как создать автоматическую оптимизацию базы данных WordPress с помощью PHP
19.02.2026
Как создать простую систему распространения лицензий в WordPress
31.03.2026
Как создать индивидуальные типы постов в WordPress с поддержкой метаполей
05.03.2026