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

Диагностика: почему нужно модифицировать корзину через хуки WooCommerce

В WooCommerce часто требуется изменить поведение корзины без правки исходного кода плагина. Например, добавить дополнительное поле, изменить стоимость товара, показать предупреждения или динамически менять данные в корзине. Прямое изменение шаблонов неудобно и неустойчиво при обновлениях WooCommerce, поэтому правильный способ — использовать хуки (actions и filters), которые предоставляет WooCommerce.

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

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

  • woocommerce_before_calculate_totals — позволяет модифицировать цены и данные в корзине перед расчетом итогов.
  • woocommerce_after_cart_item_name — добавляет HTML после названия товара в корзине.
  • woocommerce_cart_item_price — фильтр для изменения отображаемой цены товара в корзине.
  • woocommerce_cart_item_quantity — фильтр для изменения количества товара в корзине.

Пошаговое решение: изменение цены товара в корзине

Рассмотрим практический пример — как увеличить цену каждого товара в корзине на 10% без изменения цены в базе.

1. Добавляем фильтр для изменения цены перед расчетом

add_action('woocommerce_before_calculate_totals', 'custom_increase_cart_item_price', 20, 1); 
function custom_increase_cart_item_price($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    foreach ($cart->get_cart() as &$cart_item) {
        $original_price = $cart_item['data']->get_price();
        $new_price = $original_price * 1.10; // Увеличиваем на 10%
        $cart_item['data']->set_price($new_price);
    }
}

2. Проверяем результат на фронтенде

После добавления кода, очистите кеш сайта и браузера. Перейдите в корзину — цены товаров должны быть увеличены на 10%. Итоговая сумма должна соответствовать новым ценам.

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

  • Добавьте товар в корзину и откройте страницу корзины.
  • Сравните цену товара с ценой из карточки товара — должна быть выше на 10%.
  • Проверьте итоговую сумму заказа — она должна учитывать измененные цены.
  • В консоли браузера ошибок не должно быть.

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

  • Изменения не применяются: Возможно, не указан приоритет в хуке или код не загружается. Проверьте, что функция подключена в functions.php активной темы или в плагине.
  • Ошибка «Trying to get property of non-object»: Убедитесь, что $cart_item['data'] — объект WC_Product, а не null.
  • Изменения влияют на базу данных: Используйте только методы set_price() для изменения цены в корзине, не меняйте цену товара глобально.
  • Конфликты с кешем: Отключите сторонние плагины кеширования или добавьте исключения для страницы корзины.

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

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

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

add_action('woocommerce_after_cart_item_name', 'add_custom_text_after_cart_item_name', 10, 2);
function add_custom_text_after_cart_item_name($cart_item, $cart_item_key) {
    echo '<p style="color:#0073aa; font-size:12px;">Дополнительная информация о товаре</p>';
}

Сравнение способов модификации корзины

МетодПлюсыМинусыРекомендации
Изменение шаблонов корзиныГибкая настройка выводаТребуется поддержка при обновленияхИспользовать только при необходимости изменения HTML
Использование хуков (actions/filters)Безопасно, устойчиво к обновлениямНе всегда можно изменить сложную логикуПредпочтительный способ для небольших изменений
Плагины с модификацией корзиныБыстро, готовые решенияМогут быть избыточными и влиять на производительностьИспользовать, если нет времени на кодинг
Защита WordPress от локальных атак через внутренние уязвимости
03.01.2026
Удаление скриптового кода из WP REST API: безопасное решение
17.05.2026
Как защитить WordPress от привилегированных пользователей с помощью кодексов ролей
30.03.2026
Как избежать проблем с пересозданием контента в WordPress
21.11.2025
Как защитить WordPress от DDoS-атак: практические методы и примеры
16.03.2026