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

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

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

Пошаговое решение: добавление пользовательского поля в корзину с помощью хуков

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

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

add_action('woocommerce_after_cart_item_name', 'add_custom_field_to_cart_item', 10, 2);
function add_custom_field_to_cart_item($cart_item, $cart_item_key) {
    if (isset($cart_item['custom_text'])) {
        echo '<div class="custom-field">Персонализация: <strong>' . esc_html($cart_item['custom_text']) . '</strong></div>';
    } else {
        echo '<input type="text" name="custom_text[' . esc_attr($cart_item_key) . ']" placeholder="Введите текст персонализации" value="" />';
    }
}

2. Обработка и сохранение введенных данных при обновлении корзины

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

add_action('woocommerce_update_cart_action_cart_updated', 'save_custom_field_from_cart');
function save_custom_field_from_cart() {
    if (!empty($_POST['custom_text']) && is_array($_POST['custom_text'])) {
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
            if (isset($_POST['custom_text'][$cart_item_key])) {
                $custom_text = sanitize_text_field($_POST['custom_text'][$cart_item_key]);
                WC()->cart->cart_contents[$cart_item_key]['custom_text'] = $custom_text;
            }
        }
    }
}

3. Передача данных пользовательского поля в заказ

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

add_action('woocommerce_checkout_create_order_line_item', 'add_custom_field_to_order_items', 10, 4);
function add_custom_field_to_order_items($item, $cart_item_key, $values, $order) {
    if (!empty($values['custom_text'])) {
        $item->add_meta_data('Персонализация', $values['custom_text']);
    }
}

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

Данные, добавленные в мета заказа, автоматически отображаются в админке WooCommerce и в письмах покупателю и администратору.

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

  1. Перейдите на страницу корзины и убедитесь, что рядом с каждым товаром отображается поле для ввода персонализации.
  2. Введите текст в поле, обновите корзину и проверьте, что введённый текст сохраняется и отображается в корзине.
  3. Оформите заказ и в административной панели откройте созданный заказ. В позиции товара должна быть мета-информация с вашим текстом.
  4. Проверьте письмо с подтверждением заказа — в нем также должно отображаться пользовательское поле.

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

  • Поле не сохраняется после обновления корзины. Проверьте, что имя поля в input совпадает с обработчиком в $_POST. Также убедитесь, что хук woocommerce_update_cart_action_cart_updated используется правильно.
  • Данные не попадают в заказ. Проверьте, что в woocommerce_checkout_create_order_line_item используется правильный ключ массива для доступа к данным, и используйте метод add_meta_data для корректного добавления.
  • Данные не отображаются в письмах. Убедитесь, что мета-данные присутствуют в заказе. Если письма кастомные, проверьте шаблоны, чтобы они выводили мета-данные позиций заказа.

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

  • Всегда используйте sanitize_text_field или аналогичные функции для очистки входящих данных, чтобы избежать XSS-уязвимостей.
  • Не сохраняйте избыточные данные в сессии или в базе — только необходимые значения для заказа.
  • Используйте минимально необходимое количество хук-обработчиков и оптимизируйте код, чтобы не замедлять процесс обновления корзины и оформления заказа.

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

МетодПреимуществаНедостаткиИспользование
Использование хуков (как в статье)Полный контроль, без сторонних плагинов, гибкость в кастомизацииТребует навыков PHP, риски при ошибках в кодеЛучше для уникальных бизнес-задач
Плагины для пользовательских полей (например, WooCommerce Product Add-Ons)Быстрое внедрение, поддержка, без программированияЧасто платные, могут нагружать сайтПодходит для стандартных задач
WooCommerce: правильное отключение кеша корзины для корректной работы
14.07.2026
Как защитить WordPress от привязки к одному IP
25.12.2025
Как защитить WordPress от хакерского чтения файлов и копирования контента
22.03.2026
Как отключить автозапуск аудио и видео на сайте WordPress
12.05.2026
Как использовать nonces в WordPress для защиты форм и AJAX-запросов
01.05.2026