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

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

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

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

Кроме того, наличие номера телефона открывает возможности для рассылки SMS-уведомлений, двухфакторной аутентификации и персонализации сервиса.

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

Для начала добавим поле "Телефон" в стандартную форму регистрации WordPress. Для этого используем хук register_form, который позволяет выводить дополнительные поля на странице регистрации.

add_action('register_form', 'wpbloger_add_phone_field');
function wpbloger_add_phone_field() {
    $phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_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
}

Этот код добавит новое поле на страницу регистрации. Пользователь сможет ввести свой номер телефона.

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

После добавления поля необходимо проверить корректность введённого телефона и сохранить его в метаданные пользователя. Для валидации используем хук registration_errors, а для сохранения — user_register.

add_filter('registration_errors', 'wpbloger_validate_phone_field', 10, 3);
function wpbloger_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>: Введите корректный номер телефона в международном формате, например +79161234567.');
    }
    return $errors;
}

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

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

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

Самая сложная часть — подтвердить, что пользователь действительно владеет указанным номером. Для этого можно использовать сторонние SMS-сервисы, например, Twilio, SMS.ru или другие.

Общая логика такая:

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

Ниже пример упрощённой реализации с использованием сессии и виртуального SMS (без реальной отправки) для демонстрации логики.

session_start();

// Генерация и "отправка" кода при регистрации
add_action('user_register', 'wpbloger_send_sms_code');
function wpbloger_send_sms_code($user_id) {
    $phone = get_user_meta($user_id, 'phone', true);
    if (!$phone) return;

    // Генерируем 6-значный код
    $code = rand(100000, 999999);

    // Сохраняем код в сессии для примера (в реальном случае нужно в базе)
    $_SESSION['phone_verification_code'] = $code;
    $_SESSION['phone_to_verify'] = $phone;
    $_SESSION['user_id_to_verify'] = $user_id;

    // Отправка SMS (здесь только эмуляция)
    error_log("Отправлен код $code на номер $phone");
}

// Проверка кода подтверждения (пример обработчика формы)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['phone_verification_code'])) {
    if ($_POST['phone_verification_code'] == $_SESSION['phone_verification_code']) {
        update_user_meta($_SESSION['user_id_to_verify'], 'phone_verified', 1);
        echo 'Номер телефона успешно подтверждён!';
        // Очистка сессии
        unset($_SESSION['phone_verification_code'], $_SESSION['phone_to_verify'], $_SESSION['user_id_to_verify']);
    } else {
        echo 'Неверный код подтверждения.';
    }
}

Разумеется, для полноценной реализации потребуется интеграция с выбранным SMS-провайдером. Ссылку на API и примеры можно найти на сайтах провайдеров.

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

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

  • Clearfy Pro — среди множества функций есть инструменты для добавления и настройки дополнительных полей регистрации, включая телефоны с валидацией.
  • WPCommunity — плагин с поддержкой кастомных полей, в том числе для телефонов и подтверждения их через SMS, удобен для сайтов с сообществами.
  • Плагины авторизации через SMS, например "SMS Verification" или "WP SMS Verification" (не на wpshop.ru, но популярны в репозитории WordPress).

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

Вывод: что учитывать при добавлении поля телефона и подтверждении

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

Рекомендуется:

  • Использовать международный формат номера для универсальности.
  • Обеспечивать защиту от повторных запросов кода (лимиты по времени).
  • Хранить подтверждённый статус в метаданных пользователя.
  • Предусмотреть возможность восстановления или изменения телефона с повторным подтверждением.

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

Как добавить автоматические ответы в комментарии WordPress
09.01.2026
Удалить кэш в WordPress: практические способы и код для очистки
10.11.2025
Автоматическое отключение неиспользуемых плагинов в WordPress
29.01.2026
Как создать автоматическое отключение неиспользуемых тем в WordPress
02.02.2026
Как создать и использовать REST API эндпоинты в WordPress
26.12.2025