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

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

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

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

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

Сначала нужно расширить стандартную форму регистрации и добавить новое поле. Для этого используем фильтр register_form и выводим HTML с полем телефона.

function wpmagazin_add_phone_field() {
    $phone = ( isset( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
    echo '<p><label for="phone">Телефон <span style="color: red;">*</span></label><br />';
    echo '<input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
}
add_action( 'register_form', 'wpmagazin_add_phone_field' );

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

Валидация номера телефона при регистрации

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

function wpmagazin_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['phone'] ) ) {
        $errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите номер телефона.' );
    } else {
        $phone = sanitize_text_field( $_POST['phone'] );
        // Пример простой проверки: только цифры, 10-11 символов
        if ( ! preg_match( '/^\+?\d{10,11}$/', $phone ) ) {
            $errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Введите корректный номер телефона (только цифры, от 10 до 11 символов).' );
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpmagazin_validate_phone_field', 10, 3 );

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

Сохранение номера телефона в пользовательские метаданные

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

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

Теперь номер телефона хранится в метаданных пользователя и доступен для дальнейшего использования.

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

Чтобы проверить, что номер действительно принадлежит пользователю, можно реализовать отправку кода подтверждения на указанный телефон. Для этого потребуется интеграция с SMS-сервисом, например, Twilio, Sms.ru или другим.

Общий алгоритм такой:

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

Ниже пример функции отправки SMS через Sms.ru (требуется зарегистрироваться и получить API-ключ):

function wpmagazin_send_sms( $phone, $message ) {
    $api_id = 'ВАШ_API_КЛЮЧ_SMSRU';
    $url = 'https://sms.ru/sms/send?api_id=' . urlencode($api_id) . '&to=' . urlencode($phone) . '&msg=' . urlencode($message) . '&json=1';
    $response = wp_remote_get( $url );
    if ( is_wp_error( $response ) ) {
        return false;
    }
    $body = json_decode( wp_remote_retrieve_body( $response ), true );
    return ( isset( $body['status'] ) && $body['status'] == 'OK' );
}

Примерный workflow подтверждения:

  1. При регистрации генерируем случайный код, например, 6 цифр и сохраняем в сессии или базе.
  2. Отправляем SMS с этим кодом на номер пользователя.
  3. Показываем форму ввода кода на отдельной странице.
  4. Проверяем введённый код с сохранённым и активируем подтверждение.

Пример генерации и сохранения кода

function wpmagazin_generate_confirmation_code() {
    return rand(100000, 999999);
}

// При регистрации
add_action( 'user_register', function( $user_id ) {
    if ( ! empty( $_POST['phone'] ) ) {
        $phone = sanitize_text_field( $_POST['phone'] );
        $code = wpmagazin_generate_confirmation_code();
        update_user_meta( $user_id, 'phone_confirmation_code', $code );
        update_user_meta( $user_id, 'phone_confirmed', 0 );
        wpmagazin_send_sms( $phone, 'Ваш код подтверждения: ' . $code );
    }
});

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

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

Использование готовых плагинов для подтверждения телефона

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

  • Phone Verification — плагин для подтверждения телефона через SMS с поддержкой WooCommerce и форм регистрации.
  • WPGPT — универсальный плагин с AI-интеграцией, который можно настроить для валидации и подтверждения данных.

Такие плагины экономят время и предлагают удобные интерфейсы для настройки.

Выводы и рекомендации

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

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

Не забывайте о защите данных и соответствии требованиям законодательства при работе с персональными данными.

Диагностика и решение проблем PHP Fatal Error в WordPress
09.01.2026
Как создать настройку в плагине WordPress для управления оптимизацией изображений
02.03.2026
Автоматическое удаление старых заказов в WooCommerce: как настроить и проверить
02.05.2026
Как отключить автообновления WordPress и плагинов: пошаговое руководство
18.12.2025
Как использовать хуки в WordPress для расширения функциональности
19.11.2025