WooCommerce: как добавить поле для ввода серийного номера товара в корзине

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

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

Шаги для добавления поля серийного номера в корзине WooCommerce

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

Используем хук woocommerce_after_cart_item_name, чтобы отобразить поле ввода рядом с названием товара в корзине:

add_action('woocommerce_after_cart_item_name', 'add_serial_number_field_to_cart', 10, 2);
function add_serial_number_field_to_cart($cart_item, $cart_item_key) {
    $serial_number = isset($cart_item['serial_number']) ? $cart_item['serial_number'] : '';
    echo '<label for="serial_number_'.esc_attr($cart_item_key).'">Серийный номер:</label> ';
    echo '<input type="text" name="serial_number['.esc_attr($cart_item_key).']" id="serial_number_'.esc_attr($cart_item_key).'" value="'.esc_attr($serial_number).'" style="width:150px;" />';
}

2. Сохранение введённого серийного номера при обновлении корзины

Обрабатываем данные из формы корзины через хук woocommerce_cart_updated:

add_action('woocommerce_cart_updated', 'save_serial_number_field');
function save_serial_number_field() {
    if ( ! isset($_POST['serial_number']) || ! is_array($_POST['serial_number']) ) {
        return;
    }
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( isset($_POST['serial_number'][$cart_item_key]) ) {
            $serial_number = sanitize_text_field($_POST['serial_number'][$cart_item_key]);
            WC()->cart->cart_contents[$cart_item_key]['serial_number'] = $serial_number;
        }
    }
    WC()->cart->set_session();
}

3. Сохранение данных серийного номера в мета заказа

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

add_action('woocommerce_checkout_create_order_line_item', 'add_serial_number_to_order_items', 10, 4);
function add_serial_number_to_order_items($item, $cart_item_key, $values, $order) {
    if ( isset($values['serial_number']) && ! empty($values['serial_number']) ) {
        $item->add_meta_data('Серийный номер', $values['serial_number'], true);
    }
}

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

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

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

  • Поле не сохраняется при обновлении корзины
    Проверьте, что в форме корзины присутствует name="serial_number[...]" и что обработчик данных запускается на хуке woocommerce_cart_updated.
  • Серийный номер не сохраняется в заказе
    Убедитесь, что добавляете мета-данные в woocommerce_checkout_create_order_line_item, а не в другие хуки. Проверьте, что ключ мета-данных уникален и корректно передаётся.
  • В поле отображается некорректное значение
    Обязательно применяйте esc_attr() для вывода значения, чтобы избежать проблем с HTML и XSS.
  • Данные не очищаются и остаются после удаления товара из корзины
    Проверьте, что хранящиеся данные связаны с правильным ключом товара корзины и не сохраняются глобально.

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

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

Сравнение способов добавления поля серийного номера в WooCommerce

МетодПлюсыМинусыКогда использовать
Добавление поля через хуки корзины (код) Полный контроль, нет лишних плагинов, легко кастомизировать Нужно писать и тестировать код, требует навыков PHP Если требуется кастомное поведение, минимизация плагинов
Использование плагина для кастомных полей WooCommerce Быстро, без кода, поддержка и обновления Может быть избыточным, влияет на производительность, меньше гибкости Для пользователей без навыков программирования или быстрого запуска
WooCommerce: как добавить поле для ввода серийного номера товара в корзине
11.05.2026
Как правильно удалить пустые мета данные в WordPress для оптимизации базы данных
10.01.2026
Как закрыть от индексации страницы фильтров и параметры в WordPress
29.08.2026
Как создать собственный виджет в WordPress с применением PHP и хуков
17.11.2025
WooCommerce: как избежать конфликтов между платёжными шлюзами и кассовыми системами
05.08.2026