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

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

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

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

function wpbloger_add_phone_field() {
    $phone = isset($_POST['wpbloger_phone']) ? sanitize_text_field($_POST['wpbloger_phone']) : '';
    ?>
    <p>
        <label for="wpbloger_phone">Номер телефона<br />
        <input type="text" name="wpbloger_phone" id="wpbloger_phone" class="input" value="<?php echo esc_attr($phone); ?>" size="25" /></label>
    </p>
    <?php
}
add_action('register_form', 'wpbloger_add_phone_field');

Теперь поле отображается на странице регистрации. Но этого недостаточно — нужно проверить корректность введенного телефона и сохранить его.

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

Чтобы убедиться, что пользователь ввел номер телефона, и он соответствует нужному формату, используем хук registration_errors. Также с помощью user_register сохраним номер в метаданные пользователя.

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

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

Регулярное выражение /^\+?\d{10,15}$/ проверяет, что номер начинается с плюса (опционально) и содержит от 10 до 15 цифр, что подходит для большинства международных форматов.

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

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

Регистрация и установка SDK Twilio

1. Зарегистрируйтесь на Twilio и получите SID аккаунта, Auth Token и номер телефона.
2. Установите Composer и библиотеку Twilio в корень вашего сайта (если это возможно):

composer require twilio/sdk

Отправка SMS с кодом подтверждения

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

use Twilio\Rest\Client;

function wpbloger_send_sms_confirmation($user_id) {
    if (!class_exists('Twilio\Rest\Client')) {
        return;
    }

    $phone = get_user_meta($user_id, 'phone_number', true);
    if (empty($phone)) {
        return;
    }

    $sid    = 'TWILIO_ACCOUNT_SID';
    $token  = 'TWILIO_AUTH_TOKEN';
    $twilio = new Client($sid, $token);

    $code = rand(100000, 999999); // 6-значный код
    update_user_meta($user_id, 'phone_confirmation_code', $code);
    update_user_meta($user_id, 'phone_confirmed', 0);

    try {
        $message = $twilio->messages->create(
            $phone,
            [
                'from' => 'TWILIO_PHONE_NUMBER',
                'body' => "Ваш код подтверждения: $code"
            ]
        );
    } catch (Exception $e) {
        // Обработка ошибок отправки
    }
}
add_action('user_register', 'wpbloger_send_sms_confirmation');

Не забудьте заменить TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN и TWILIO_PHONE_NUMBER на реальные значения из вашего аккаунта Twilio.

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

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

function wpbloger_phone_confirmation_form() {
    if (!is_user_logged_in()) {
        return 'Пожалуйста, войдите в аккаунт для подтверждения телефона.';
    }

    $user_id = get_current_user_id();
    $message = '';

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

        if ($input_code === $saved_code) {
            update_user_meta($user_id, 'phone_confirmed', 1);
            delete_user_meta($user_id, 'phone_confirmation_code');
            $message = 'Телефон успешно подтвержден!';
        } else {
            $message = 'Неверный код подтверждения.';
        }
    }

    ob_start();
    if ($message) {
        echo '<p>' . esc_html($message) . '</p>';
    }
    if (get_user_meta($user_id, 'phone_confirmed', true) != 1) {
        ?>
        <form method="post">
            <p>
                <label for="wpbloger_confirmation_code">Введите код подтверждения:</label><br />
                <input type="text" name="wpbloger_confirmation_code" id="wpbloger_confirmation_code" required />
            </p>
            <p><input type="submit" value="Подтвердить" /></p>
        </form>
        <?php
    } else {
        echo '<p>Ваш номер телефона подтвержден.</p>';
    }
    return ob_get_clean();
}
add_shortcode('wpbloger_phone_confirmation', 'wpbloger_phone_confirmation_form');

Добавьте шорткод [wpbloger_phone_confirmation] на отдельную страницу «Подтверждение телефона» для удобства пользователей.

Альтернативные подходы и полезные плагины

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

  • Clearfy Pro — для оптимизации и добавления функционала в форму регистрации.
  • WPGPT — для автоматизации ответов поддержки, которые могут помочь при подтверждении.

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

Контроль доступа по подтвержденному телефону

Чтобы ограничить доступ к определённому контенту или функционалу для пользователей с неподтверждённым номером, используйте проверку мета-поля phone_confirmed. Например, в шаблонах или функциях проверяйте:

if (get_user_meta(get_current_user_id(), 'phone_confirmed', true) != 1) {
    echo 'Пожалуйста, подтвердите номер телефона для доступа к этому разделу.';
    return;
}

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

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

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

Обязательно тестируйте работу кода на тестовом сайте и внимательно следите за безопасностью: не храните коды подтверждения в открытом виде, используйте HTTPS и проверяйте все входные данные.

Кастомизация пунктов меню в админке WordPress: настройка и примеры кода
30.12.2025
Как создать автоматическое отключение неиспользуемых тем в WordPress
02.02.2026
Как использовать фильтр YITH WooCommerce Wishlist для добавления собственных критериев
16.01.2026
Автоматическое удаление старых записей WordPress через Cron с примерами кода
25.02.2026
Как запретить отображение отзывов по ссылке в WordPress
16.02.2026