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

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

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

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

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

Используем хук woocommerce_checkout_fields для добавления текстового поля в секцию адреса или отдельным блоком. Например, добавим поле confirmation_code после поля с email:

add_filter('woocommerce_checkout_fields', function($fields) {
    $fields['billing']['confirmation_code'] = [
        'type'        => 'text',
        'label'       => 'Код подтверждения',
        'placeholder' => 'Введите код подтверждения из SMS',
        'required'    => true,
        'class'       => ['form-row-wide'],
        'priority'    => 60,
    ];
    return $fields;
});

2. Валидация введённого кода

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

add_action('woocommerce_checkout_process', function() {
    if (!isset($_POST['confirmation_code']) || $_POST['confirmation_code'] !== '123456') {
        wc_add_notice('Неверный код подтверждения. Пожалуйста, введите правильный код.', 'error');
    }
});

3. Сохранение поля в метаданных заказа

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

add_action('woocommerce_checkout_update_order_meta', function($order_id) {
    if (!empty($_POST['confirmation_code'])) {
        update_post_meta($order_id, '_confirmation_code', sanitize_text_field($_POST['confirmation_code']));
    }
});

4. Отображение кода подтверждения в админке

Для удобства просмотра добавим код в метабоксы редактирования заказа:

add_action('woocommerce_admin_order_data_after_billing_address', function($order){
    $code = get_post_meta($order->get_id(), '_confirmation_code', true);
    if ($code) {
        echo '<p><strong>Код подтверждения:</strong> ' . esc_html($code) . '</p>';
    }
});

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

  • Перейдите на страницу оформления заказа в магазине WooCommerce.
  • Проверьте наличие нового поля "Код подтверждения" после email.
  • Попробуйте оформить заказ, введя неправильный код — должна появиться ошибка.
  • Введя код 123456, заказ должен успешно оформиться.
  • В админке в карточке заказа проверьте, что код отображается в разделе с адресом биллинга.

Частые ошибки и как их исправить

  • Поле не отображается на странице оформления заказа: проверьте, что функция добавления поля подключена и нет конфликтов с темой или плагинами, которые могут переопределять поля оформления заказа.
  • Валидация не срабатывает: убедитесь, что хук woocommerce_checkout_process корректно добавлен и не перезаписывается другим кодом.
  • Данные не сохраняются в заказе: проверьте, что в $_POST приходит поле confirmation_code, и используется update_post_meta с правильным ID заказа.
  • Код не отображается в админке: убедитесь, что хук woocommerce_admin_order_data_after_billing_address не отключён и вывод происходит после загрузки заказа.

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

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

Сравнение вариантов реализации поля подтверждения в WooCommerce

ВариантОписаниеПлюсыМинусы
Код на PHP (как в статье) Добавление поля и валидация через хуки WooCommerce Контроль над логикой, нет лишних плагинов Нужно писать и поддерживать код самостоятельно
Плагин «Checkout Field Editor» Графический интерфейс для добавления полей Удобно для новичков, быстрое добавление Может быть недостаточно гибким для сложной валидации
Плагин со сторонней SMS-верификацией Интеграция с внешними сервисами для подтверждения Полная автоматизация и безопасность Платно, сложность настройки, зависимость от сервиса
Как создать динамические отзывы в WordPress с Expert Review
19.02.2026
Как удалить кэш в WordPress: практические способы и советы
28.01.2026
Как создать автоматические отзывы с помощью Expert Review в WordPress
05.02.2026
Как избавиться от повторяющихся постов в WordPress без плагинов
14.05.2026
Как удалить неиспользуемые теги в WordPress с помощью кода
09.04.2026