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

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

В магазинах на WooCommerce часто возникает необходимость динамически менять цены товаров по определённым условиям — например, в зависимости от даты, категории, наличия скидок или количества в корзине. Ручное обновление цен неудобно и требует много времени, особенно при большом ассортименте. Автоматизация через хуки WooCommerce позволяет программно изменять цену без вмешательства администратора.

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

Основной хук для изменения цены перед выводом на сайте — woocommerce_product_get_price и woocommerce_product_get_regular_price. Для изменения цены в корзине и при расчёте итогов — woocommerce_before_calculate_totals.

Пример: изменим цену товара на 10% ниже, если он относится к категории «Распродажа».

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);  
add_filter('woocommerce_product_get_regular_price', 'custom_dynamic_price', 10, 2);

function custom_dynamic_price($price, $product) {
    if (has_term('sale', 'product_cat', $product->get_id())) {
        $price = $price * 0.9; // скидка 10%
    }
    return $price;
}

Обработка цены в корзине

Важно применить изменения и в корзине, чтобы клиент видел актуальную цену. Для этого используйте хук woocommerce_before_calculate_totals и измените цену товара в объекте корзины.

add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 10, 1);

function custom_cart_item_price($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        if (has_term('sale', 'product_cat', $product->get_id())) {
            $new_price = $product->get_price() * 0.9;
            $product->set_price($new_price);
        }
    }
}

Пошаговое решение для автоматизации изменения цен

  1. Определите условие изменения цены (категория, дата, атрибут).
  2. Добавьте фильтры woocommerce_product_get_price и woocommerce_product_get_regular_price для фронтенда.
  3. Добавьте обработчик woocommerce_before_calculate_totals для изменения цены в корзине.
  4. Тестируйте на тестовом сайте, чтобы не ломать продажи.
  5. Оптимизируйте код, избегая лишних запросов.

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

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

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

  • Изменения не отображаются в корзине: забыли использовать woocommerce_before_calculate_totals для обновления цен в корзине.
  • Цена меняется в админке: добавьте проверку if (is_admin() && !defined('DOING_AJAX')) return; в обработчике, чтобы не ломать административную панель.
  • Конфликты с плагинами кэширования: отключите кэширование страниц с корзиной и товаром или настройте исключения.
  • Скидка применяется ко всем товарам: проверьте правильность условия has_term() и ID категории.

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

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

Сравнение способов автоматизации изменения цен

МетодПреимуществаНедостатки
Добавление кода в functions.phpБыстро, гибко, бесплатноРиск потерять при обновлении темы, требует навыков PHP
Использование плагинов для динамических ценГотовые решения с интерфейсом, меньше кодаМожет быть платным, нагрузка на сайт
Изменение цен через SQL-запросыМассовое обновлениеРиск ошибок, не динамично
Как использовать хуки для автоматизации в WordPress
17.12.2025
Как правильно отключить WooCommerce Cart Session для ускорения сайта
22.06.2026
Как использовать WooCommerce хуки для автоматизации изменения стоимости товаров
31.07.2026
Как автоматизировать управление ролями и правами в WordPress
25.01.2026
Как удалить или изменить заголовок страницы в WordPress через фильтр
08.02.2026