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

Почему нужно добавить поле для кода подтверждения в WooCommerce?

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

Диагностика: как понять, что стандартных полей WooCommerce недостаточно

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

Признаки необходимости добавления поля:

  • Вы используете SMS- или email-подтверждение заказа;
  • Покупатели жалуются, что не могут ввести код подтверждения;
  • Вам нужно проверить уникальный код до завершения заказа.

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

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

add_filter('woocommerce_checkout_fields', 'add_confirmation_code_checkout_field');
function add_confirmation_code_checkout_field($fields) {
    $fields['billing']['billing_confirmation_code'] = array(
        'type'        => 'text',
        'label'       => __('Код подтверждения', 'woocommerce'),
        'required'    => true,
        'placeholder' => __('Введите код, отправленный вам', 'woocommerce'),
        'class'       => array('form-row-wide'),
        'priority'    => 120,
    );
    return $fields;
}

2. Валидация поля на сервере

add_action('woocommerce_checkout_process', 'validate_confirmation_code_field');
function validate_confirmation_code_field() {
    if (empty($_POST['billing_confirmation_code'])) {
        wc_add_notice(__('Пожалуйста, введите код подтверждения.'), 'error');
    } else {
        $code = sanitize_text_field($_POST['billing_confirmation_code']);
        // Пример проверки кода (замените на вашу логику)
        if ($code !== '123456') {
            wc_add_notice(__('Неверный код подтверждения.'), 'error');
        }
    }
}

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

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

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

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

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

Для проверки выполните следующие шаги:

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

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

  • Поле не отображается на странице оформления заказа: проверьте, что хук woocommerce_checkout_fields добавлен в functions.php вашей активной темы или плагина, и нет конфликтов с другими плагинами.
  • Ошибка валидации не появляется: убедитесь, что хук woocommerce_checkout_process корректно подключен, и что вывод ошибок работает (wc_add_notice).
  • Значение поля не сохраняется в заказе: проверьте, что вы используете woocommerce_checkout_update_order_meta и что ключ метаполя уникален и не конфликтует с другими.
  • Код подтверждения не проверяется по вашей логике: замените пример проверки на реальную интеграцию с вашим SMS-провайдером или БД кодов.

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

  • Используйте sanitize_text_field() для очистки данных из формы, чтобы избежать XSS.
  • Не храните коды подтверждения в открытом виде в базе, если они одноразовые — лучше сверять их на лету через API провайдера.
  • Для масштабных магазинов с высоким трафиком оптимизируйте валидацию через AJAX, чтобы уменьшить нагрузку на сервер и повысить UX.
  • Если добавляете множество кастомных полей — группируйте их, чтобы не засорять базу метаданными.

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

СпособПлюсыМинусыПример
Код в functions.phpПолный контроль, нет лишних плагиновТребует навыков PHP, сложнее поддерживатьПример кода в статье
Плагин для кастомных полей (например, Checkout Field Editor)Простой интерфейс, быстроПотенциально лишний плагин, меньше гибкостиCheckout Field Editor от WooCommerce
Интеграция с внешним сервисом SMSАвтоматизация, безопасностьСложность настройки, возможные задержкиИнтеграция с Twilio, SMS.ru и др.
Как использовать WooCommerce REST API для массового управления заказами
23.06.2026
Как отключить AJAX пагинацию в WordPress без плагинов
30.12.2025
Как создать автоматические проверки качества контента в WordPress
25.01.2026
Как добавить поле для ввода кода подтверждения в WooCommerce на этапе оформления заказа
09.07.2026
Как удалить неактивных пользователей WordPress с помощью кода
09.03.2026