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']) ? esc_attr($cart_item['serial_number']) : '';
    echo '<label for="serial_number_' . $cart_item_key . '">Серийный номер:</label> ';
    echo '<input type="text" name="serial_number[' . $cart_item_key . ']" id="serial_number_' . $cart_item_key . '" value="' . $serial_number . '" size="20" />';
}

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'])) {
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
            if (isset($_POST['serial_number'][$cart_item_key])) {
                $serial = sanitize_text_field($_POST['serial_number'][$cart_item_key]);
                WC()->cart->cart_contents[$cart_item_key]['serial_number'] = $serial;
            }
        }
    }
}

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']);
    }
}

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

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

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

  • Поле не сохраняется после обновления корзины: проверьте правильность обработки данных в функции save_serial_number_field и убедитесь, что имена полей совпадают.
  • Серийный номер не отображается в заказе: проверьте добавление метаданных в woocommerce_checkout_create_order_line_item, убедитесь, что поле передается в массиве $values.
  • Проблемы с валидацией данных: добавьте проверку формата серийного номера, если требуется, например, с помощью регулярных выражений.

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

  • Санализируйте ввод пользователя через sanitize_text_field для защиты от XSS и инъекций.
  • Не храните чувствительные данные в сессии без шифрования.
  • Минимизируйте количество лишних запросов к базе, используя свойства корзины для хранения временных данных.
  • При необходимости оптимизируйте отображение поля через AJAX, чтобы не перегружать страницу при обновлении.

Сравнение способов реализации

СпособОписаниеПлюсыМинусы
Код в functions.phpДобавление поля и сохранение через хукиНе требует плагинов, гибкость настройкиТребует навыков программирования, поддержка зависит от темы
Плагин "Product Add-Ons"Готовое решение для добавления доп. полейПростота использования, поддержкаПотенциальное замедление сайта, возможные конфликты
Кастомный плагинОтдельный плагин для управления серийными номерамиУдобство масштабирования, независимость от темыДополнительная разработка и поддержка
Как использовать WooCommerce хуки для настройки страницы товара
17.04.2026
WooCommerce: как автоматически удалять заказы по статусу и дате
14.05.2026
Как избежать проблем с перенаправлениями в WordPress
13.01.2026
Оптимизация загрузки скриптов в WordPress: практические советы и примеры
06.04.2026
Как создать автоматические уведомления о обновлениях в WordPress
03.01.2026