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

Диагностика проблемы: почему нужна кастомизация корзины

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

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

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

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

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

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

add_action('woocommerce_after_cart', 'add_custom_comment_field_to_cart');
function add_custom_comment_field_to_cart() {
    echo '<div class="custom-comment">';
    echo '<label for="cart_comment">Комментарий к заказу:</label>';
    echo '<textarea id="cart_comment" name="cart_comment" rows="3" cols="50"></textarea>';
    echo '</div>';
}

add_action('woocommerce_cart_updated', 'save_cart_comment_field');
function save_cart_comment_field() {
    if (isset($_POST['cart_comment'])) {
        WC()->session->set('cart_comment', sanitize_textarea_field($_POST['cart_comment']));
    }
}

Этот код добавит textarea под корзиной и сохранит введённый комментарий в сессию WooCommerce. В дальнейшем его можно вывести на странице оформления заказа или в админке.

Пример 2: Изменение отображения цены товара в корзине

Добавим скидку 10% к каждому товару только в корзине (на примере фильтра):

add_filter('woocommerce_cart_item_price', 'custom_discounted_price_in_cart', 10, 3);
function custom_discounted_price_in_cart($price_html, $cart_item, $cart_item_key) {
    $product = $cart_item['data'];
    $price = $product->get_price();
    $discounted_price = $price * 0.9; // 10% скидка
    $price_html = wc_price($discounted_price);
    return $price_html;
}

Обратите внимание, что этот фильтр меняет только отображение цены, не стоимость в итогах заказа. Для реального пересчёта нужно использовать другие хуки.

Пошаговое решение задачи кастомизации корзины через хуки

  1. Определите, какую именно часть корзины хотите изменить (название, цена, поле, итоги).
  2. Найдите подходящий хук в документации WooCommerce (официальные хуки WooCommerce).
  3. Добавьте код в файл functions.php вашей дочерней темы или в собственный плагин, используя правильные хуки.
  4. Если нужно сохранить данные из пользовательских полей, используйте сессии WooCommerce (WC()->session) или сохраняйте в метаданных заказа на этапе оформления.
  5. Тестируйте изменения в режиме отладки, проверяя консоль и логи сервера.
  6. Проверьте, что изменения не ломают процесс оформления заказа и правильно отображаются на фронтенде и в админке.

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

Для проверки работоспособности кастомизации корзины сделайте следующее:

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

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

  • Добавление кода в файлы плагина WooCommerce. При обновлении плагина изменения будут потеряны. Решение: использовать дочернюю тему или отдельный плагин.
  • Использование неправильного хука или фильтра. Хук не срабатывает или срабатывает в неправильное время. Решение: внимательно изучать документацию и тестировать хук на вывод.
  • Отсутствие проверки данных из $_POST. Это может привести к уязвимостям. Решение: всегда использовать функции очистки данных, например sanitize_textarea_field.
  • Изменение отображаемой цены без учета итоговой суммы. Пользователь видит скидку, но итог не меняется, что сбивает с толку. Решение: для реального пересчёта использовать хук woocommerce_cart_calculate_fees или woocommerce_before_calculate_totals.
  • Не сохранение пользовательских данных между страницами. Решение: использовать WC()->session или сохранять данные в метаполях заказа.

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

  • Не внедряйте тяжелые вычисления в хуки, которые срабатывают часто (например, в woocommerce_cart_item_price), чтобы не замедлять загрузку страницы.
  • Используйте nonce-поля и проверки прав доступа, если добавляете формы для сохранения данных в корзине.
  • Кэширование данных в корзине ограничено, так как корзина — динамическая часть, используйте transient с осторожностью.
  • Тестируйте изменения на staging-сайте перед внедрением в продакшен.

Сравнение вариантов кастомизации корзины

МетодОписаниеПлюсыМинусы
Изменение шаблонов WooCommerceКопирование и правка файлов шаблоновПолный контроль над HTML и разметкойРиск конфликтов при обновлении, сложность поддержки
Использование хуков и фильтровДобавление/изменение через PHP кодБезопасно, легко обновлять плагин, гибкоОграничения по структуре вывода, требует знания хуков
Использование плагинов для кастомизацииГотовые решения без кодаБыстро, удобно для непрофессионаловМожет замедлять сайт, ограничения по функционалу
WooCommerce: как автоматически удалять неактивные товары по дате последнего обновления
24.05.2026
Как создать динамический шаблон для WooCommerce с кастомным выводом товаров
17.02.2026
WooCommerce: как использовать хуки для кастомизации корзины
16.05.2026
WooCommerce: как изменить стоимость товаров в корзине без пересчета
08.05.2026
WooCommerce: как изменить стоимость товаров в корзине без пересчета
21.05.2026