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Быстро и эффективно для большого каталогаНе подходит для динамических условий
WooCommerce: как удалить старые вариации товаров с помощью кода
13.05.2026
Как создать собственный тип записи в WordPress
24.11.2025
WooCommerce: автоматическое отключение способов оплаты при проблемах с интернет-соединением
03.06.2026
Как удалить пустые метаданные в WordPress для оптимизации базы данных
06.03.2026
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
09.05.2026