WooCommerce: как добавить поле для подтверждения номера телефона на этапе оформления заказа

Диагностика задачи: зачем нужно подтверждение номера телефона в WooCommerce

В интернет-магазинах на WooCommerce часто требуется не только сбор номера телефона клиента, но и его подтверждение. Это помогает снизить количество ошибок в заказах, повысить качество обратной связи и уменьшить мошенничество. По умолчанию WooCommerce не предоставляет второго поля для подтверждения телефона, поэтому приходится добавлять его самостоятельно.

Пошаговое решение: добавление поля подтверждения номера телефона

1. Добавляем новое поле на страницу оформления заказа

Используем хук woocommerce_checkout_fields для добавления поля billing_phone_confirm рядом с основным телефоном:

add_filter('woocommerce_checkout_fields', function($fields) {
    $fields['billing']['billing_phone_confirm'] = array(
        'type'        => 'tel',
        'label'       => 'Подтверждение номера телефона',
        'required'    => true,
        'priority'    => 25,
        'placeholder' => 'Введите номер телефона повторно',
        'class'       => array('form-row-wide'),
        'clear'       => true,
    );
    return $fields;
});

2. Валидируем совпадение номеров при отправке формы

Добавляем проверку с помощью хука woocommerce_checkout_process, чтобы убедиться, что оба поля совпадают:

add_action('woocommerce_checkout_process', function() {
    if ( isset($_POST['billing_phone']) && isset($_POST['billing_phone_confirm']) ) {
        $phone = sanitize_text_field($_POST['billing_phone']);
        $phone_confirm = sanitize_text_field($_POST['billing_phone_confirm']);
        if ($phone !== $phone_confirm) {
            wc_add_notice('Номера телефонов не совпадают. Пожалуйста, введите одинаковые номера.', 'error');
        }
    }
});

3. Сохраняем подтверждённый номер телефона в метаданных заказа

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

add_action('woocommerce_checkout_update_order_meta', function($order_id) {
    if ( isset($_POST['billing_phone_confirm']) ) {
        update_post_meta($order_id, '_billing_phone_confirm', sanitize_text_field($_POST['billing_phone_confirm']));
    }
});

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

  • Перейдите на страницу оформления заказа и убедитесь, что появилось новое поле «Подтверждение номера телефона».
  • Попробуйте ввести разные номера в поле телефона и подтверждения — должна появиться ошибка.
  • При совпадении номеров заказ должен успешно оформляться.
  • Проверьте в админке WooCommerce в деталях заказа наличие метаданных _billing_phone_confirm с введённым значением.

Частые ошибки и способы их исправления

  • Поле не отображается на странице оформления заказа. Проверьте, что код добавлен в файл functions.php активной темы или в плагин, и что нет конфликтов с другими плагинами, перезапустите кэш.
  • Ошибка валидации не срабатывает. Убедитесь, что хук woocommerce_checkout_process добавлен корректно и функция не завершается раньше из-за ошибок в коде.
  • Данные не сохраняются в заказе. Проверьте, что в $_POST приходят оба поля и что update_post_meta вызывается с правильным ID заказа.
  • Формат номера телефона не проверяется. Для дополнительной валидации можно добавить регулярное выражение или подключить библиотеку libphonenumber.

Практические советы по безопасности и производительности

  • Всегда используйте функции sanitize_text_field для очистки данных из формы.
  • Не храните в базе необработанные данные пользователя.
  • Для масштабируемых решений можно реализовать подтверждение номера через SMS-сервисы, но это выходит за рамки данной статьи.
  • Минимизируйте количество полей, чтобы не усложнять оформление заказа.

Сравнение вариантов реализации

МетодПлюсыМинусыПример кода
Добавление поля через woocommerce_checkout_fieldsПростая реализация, подходит для большинства задачНет полноценной проверки формата номераВ статье
Использование плагинов для подтверждения телефона (например, SMS-сервисы)Реальное подтверждение номера через SMSДополнительная стоимость, сложность настройкиПлагины на маркетплейсах WooCommerce
Валидация номера с помощью регулярных выражений или библиотекТочная проверка формата номераТребуется дополнительный код и тестированиеСамостоятельная разработка
Как использовать WooCommerce REST API для массового изменения товаров
18.06.2026
Как использовать REST API WordPress для автоматизации задач
26.03.2026
Как создать автоматический импорт продуктов в WordPress с помощью REST API
29.03.2026
Как создать автоматические email-рассылки в WordPress без плагинов
16.04.2026
Как исправить ошибку WooCommerce «Невозможно создать заказ» при смене способа оплаты
08.05.2026