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

Диагностика задачи: зачем и когда нужно менять цену автоматически

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

Основные способы автоматического изменения цены в WooCommerce

  • Использование хука woocommerce_before_calculate_totals для динамического изменения цены в корзине;
  • Массовое обновление цены товаров через WP-CLI или скрипты;
  • Применение специальных плагинов для управления скидками и наценками;
  • Создание пользовательских правил на основе мета-данных и условий в коде.

Пошаговое решение: изменение цены товара в корзине на основе определённого условия

1. Выбор условия изменения цены

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

2. Реализация кода

add_action('woocommerce_before_calculate_totals', 'custom_dynamic_price_adjustment', 20, 1);
function custom_dynamic_price_adjustment($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    // Защита от повторного выполнения
    if (did_action('woocommerce_before_calculate_totals') >= 2) return;

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (has_term('rasprodazha', 'product_cat', $product->get_id())) {
            $original_price = $product->get_regular_price();
            $discounted_price = $original_price * 0.9; // скидка 10%
            $product->set_price($discounted_price);
        }
    }
}

3. Добавление кода в тему или плагин

Рекомендуется вставлять данный код в файл functions.php дочерней темы или создавать отдельный плагин, чтобы избежать потери изменений при обновлениях.

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

  • Добавьте в корзину товар из категории «Распродажа» и проверьте, что цена автоматически уменьшилась на 10%.
  • Добавьте товар из другой категории — цена должна оставаться неизменной.
  • Очистите кэш сайта и браузера, если используете кэширование, чтобы увидеть изменения.

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

  • Цена не меняется в корзине: Проверьте, что хук woocommerce_before_calculate_totals подключён правильно и нет конфликтов с другими плагинами, меняющими цену.
  • Изменение цены влияет на страницу товара: Используйте только set_price в корзине, не меняйте цену товара глобально.
  • Скидка применяется несколько раз: Добавьте проверку did_action('woocommerce_before_calculate_totals') и возвращайте выполнение при повторном вызове.
  • Кэширование мешает увидеть изменения: Очистите кэш и отключите кэширование для корзины, если возможно.

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

  • Не используйте изменение цены напрямую в базе данных — всегда через API WooCommerce.
  • Избегайте сложных запросов внутри хука, чтобы не замедлять загрузку страницы корзины.
  • Тестируйте изменения на staging-сервере перед внедрением на живой сайт.
  • При необходимости массового обновления цен используйте WP-CLI, чтобы не перегружать сайт.

Альтернативные варианты реализации: плагин, код, компромиссы

МетодПреимуществаНедостатки
Самописный код на хукеПолный контроль, гибкость, лёгкость кастомизацииТребует навыков, можно допустить ошибки
Плагин для скидок (например, WooCommerce Dynamic Pricing)Удобство настройки, готовый функционалМожет замедлять сайт, платные версии
Массовое обновление цен через WP-CLIБыстро и эффективно для большого каталогаНе подходит для динамических условий
Как создать меню в WordPress с помощью хука wp_nav_menu_items
27.11.2025
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
09.05.2026
Как сделать автоматическое удаление старых продуктов в WooCommerce
30.12.2025
Как установить и настроить подключение к внешней базе данных в WordPress
20.04.2026
Оптимизация базы данных WordPress: удаляем старые ревизии и ускоряем сайт
13.11.2025