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

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

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

Диагностика задачи: что надо учесть перед реализацией

  • Какое именно значение будет вводить пользователь и в каком формате.
  • Когда и как проверять введённый код: сразу при отправке формы или в момент создания заказа.
  • Как отобразить ошибку, если код некорректный.
  • Как сохранить значение в метаданных заказа для дальнейшей обработки.
  • Влияние на производительность и UX: не стоит перегружать форму лишними проверками.

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

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

Для этого используем хук woocommerce_after_order_notes и функцию woocommerce_form_field():

add_action('woocommerce_after_order_notes', 'add_confirmation_code_field_to_checkout');
function add_confirmation_code_field_to_checkout($checkout) {
    woocommerce_form_field('confirmation_code', array(
        'type'          => 'text',
        'class'         => array('confirmation-code form-row-wide'),
        'label'         => __('Код подтверждения'),
        'placeholder'   => __('Введите код подтверждения'),
        'required'      => false,
    ), $checkout->get_value('confirmation_code'));
}

2. Валидация поля при отправке формы

Проверяем введённый код в хуке woocommerce_checkout_process:

add_action('woocommerce_checkout_process', 'validate_confirmation_code_field');
function validate_confirmation_code_field() {
    if (!empty($_POST['confirmation_code'])) {
        $code = sanitize_text_field($_POST['confirmation_code']);
        // Пример логики проверки: код должен быть "WPTO2024"
        if ($code !== 'WPTO2024') {
            wc_add_notice(__('Неверный код подтверждения.'), 'error');
        }
    }
}

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

Используем хук woocommerce_checkout_update_order_meta:

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

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

Добавим вывод в метабоксе заказа с помощью woocommerce_admin_order_data_after_billing_address:

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

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

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

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

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

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

  • Всегда используйте sanitize_text_field() для очистки входящих данных.
  • Не делайте поле обязательным, если код не всегда нужен, чтобы не отпугнуть покупателей.
  • Для сложной логики проверки кода используйте кэширование или загрузку списка валидных кодов из базы или внешнего API, чтобы избежать задержек.
  • Если планируете использовать много различных кодов, рассмотрите создание отдельной таблицы или пользовательского типа записи для управления ими.

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

МетодПлюсыМинусы
Добавление через хук woocommerce_after_order_notesПростой и быстрый способ, подходит для большинства тем.Возможны конфликты с темами, не всегда подходит для сложных форм.
Использование фильтра woocommerce_checkout_fieldsГибкость в изменении порядка и типа полей.Требует более глубокого понимания структуры полей WooCommerce.
Плагин для кастомизации полей оформления заказаНе требует кода, управление через UI.Дополнительная нагрузка, ограниченная гибкость без кода.
Как запретить индексацию внутренних поисковых страниц WordPress
24.08.2026
Как отключить XML-RPC в WordPress и проверить, что сайт не ломается
10.08.2026
Как создать автоматические отзывы в WordPress с Expert Review
05.03.2026
Как удалить неиспользуемые таблицы из базы данных WordPress
08.12.2025
Как использовать хуки в WordPress: практические примеры и советы
10.11.2025