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

Диагностика: зачем кастомизировать корзину WooCommerce и какие задачи решают хуки

Корзина на WooCommerce — ключевой элемент пользовательского пути. Часто стандартный функционал не покрывает бизнес-задачи: нужно добавить дополнительные поля, изменить вывод элементов, добавить свои сообщения или изменить логику подсчета стоимости. Лучший способ — использовать хуки (actions и filters), которые предоставляет WooCommerce, чтобы не менять исходный код плагина и сохранить совместимость с обновлениями.

Основные хуки для кастомизации корзины WooCommerce

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

  • woocommerce_before_cart — вывод до содержимого корзины;
  • woocommerce_after_cart — вывод после содержимого корзины;
  • woocommerce_cart_item_name — фильтр названия товара в корзине;
  • woocommerce_cart_item_price — фильтр цены товара в корзине;
  • woocommerce_cart_item_quantity — фильтр количества товара в корзине;
  • woocommerce_cart_totals_before_order_total — вывод перед итоговой суммой;
  • woocommerce_cart_calculate_fees — добавление дополнительных сборов;
  • woocommerce_after_cart_item_quantity_update — действие после обновления количества товара.

Пошаговое решение: добавляем поле "Комментарий к товару" в корзину для каждого товара

Задача: дать пользователю возможность добавить комментарий к каждому товару прямо в корзине, чтобы потом сохранить его в мета-данных заказа.

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

add_filter('woocommerce_cart_item_name', 'add_comment_field_to_cart_item', 10, 3); 
function add_comment_field_to_cart_item($product_name, $cart_item, $cart_item_key) {
    $comment = isset(WC()->session->get('cart_comments')[$cart_item_key]) ? WC()->session->get('cart_comments')[$cart_item_key] : '';
    $field = '<label for="comment_'.esc_attr($cart_item_key).'">Комментарий:</label>'
           .'<input type="text" id="comment_'.esc_attr($cart_item_key).'" name="cart_comments['.esc_attr($cart_item_key).']" value="'.esc_attr($comment).'" style="margin-left:10px;"/>';
    return $product_name . $field;
}

2. Сохраняем комментарии при обновлении корзины

add_action('woocommerce_cart_updated', 'save_cart_comments');
function save_cart_comments() {
    if (isset($_POST['cart_comments']) && is_array($_POST['cart_comments'])) {
        WC()->session->set('cart_comments', array_map('sanitize_text_field', $_POST['cart_comments']));
    }
}

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

add_action('woocommerce_checkout_create_order_line_item', 'add_comment_to_order_items', 10, 4);
function add_comment_to_order_items($item, $cart_item_key, $values, $order) {
    $comments = WC()->session->get('cart_comments');
    if (!empty($comments[$cart_item_key])) {
        $item->add_meta_data('Комментарий к товару', $comments[$cart_item_key]);
    }
}

4. Очищаем комментарии после оформления заказа

add_action('woocommerce_thankyou', 'clear_cart_comments_session');
function clear_cart_comments_session($order_id) {
    WC()->session->__unset('cart_comments');
}

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

  • Перейдите в корзину, убедитесь, что возле каждого товара появилось поле «Комментарий».
  • Заполните поле, обновите корзину, проверьте, что введённый текст не пропадает.
  • Оформите заказ, зайдите в админку WooCommerce — в заказе у каждого товара должен отображаться комментарий в мета-данных.

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

  • Комментарии не сохраняются между обновлениями корзины: Проверьте, что сессия WooCommerce включена и работает, и что при обновлении корзины отправляется поле cart_comments.
  • Комментарии не видны в заказе: Убедитесь, что хук woocommerce_checkout_create_order_line_item подключён и метаданные добавляются в правильном формате.
  • Ошибка при обновлении корзины: Проверьте, что все данные проходят фильтрацию через sanitize_text_field и что нет конфликтов с другими плагинами.

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

  • Всегда фильтруйте и проверяйте входящие данные перед сохранением в сессию или базу данных.
  • Используйте сессию WooCommerce для временного хранения данных корзины, а не cookies или $_POST напрямую.
  • Добавляйте минимальный JavaScript, чтобы не перегружать страницу, лучше использовать штатные механизмы WooCommerce.
  • При большом количестве товаров в корзине учитывайте, что дополнительные поля могут влиять на скорость загрузки корзины.

Сравнение вариантов реализации поля комментария в корзине

МетодКодПлюсыМинусы
Сессия + хуки (текущий способ)Пример вышеПростота, сохраняется между обновлениями, данные в заказеЗависит от сессии, не подходит для долгих сессий без активности
Пользовательские таблицы базы данныхТребует создания таблиц и запросовПоддержка больших данных, долговременное хранениеСложнее в реализации, нагрузка на базу
AJAX сохранение комментариевJS + PHP обработчикБыстрое обновление без перезагрузкиНужен дополнительный JS, сложнее поддерживать
Как использовать AJAX в WordPress для обновления шаблонов без перезагрузки страницы
13.02.2026
WooCommerce: как удалить товар из корзины без пересчета стоимости
04.06.2026
WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
01.06.2026
Как создать динамический шаблон для WooCommerce с кастомным выводом товаров
17.02.2026
Как создать шорткод для вывода пользовательских данных в WordPress
07.11.2025