wp-lessons.ru wordpress WP-Lessons

WooCommerce: автоматическое изменение цен товаров при снижении запаса

В чём суть задачи: почему нужно менять цены при снижении запаса

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

Диагностика проблемы: как понять, что цены не меняются автоматически

Если вы хотите, чтобы цена товара менялась при снижении остатка, но этого не происходит, проверьте следующие моменты:

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

Пошаговое решение: как автоматически менять цены при снижении запаса

1. Добавляем хук для отслеживания изменения количества товара

Для изменения цены при снижении запаса используем хук woocommerce_reduce_order_stock, который срабатывает после оформления заказа и уменьшения количества товара.

add_action('woocommerce_reduce_order_stock', 'wc_change_price_on_stock_reduction', 10, 1);function wc_change_price_on_stock_reduction($order) {    foreach ($order->get_items() as $item) {        $product = $item->get_product();        if (!$product || !$product->managing_stock()) {            continue;        }        $stock_quantity = $product->get_stock_quantity();        // Условие для снижения цены: если запас меньше 10        if ($stock_quantity !== null && $stock_quantity < 10) {            $new_price = $product->get_regular_price() * 0.9; // скидка 10%            // Обновляем цену через мета поле '_regular_price' и '_price'            update_post_meta($product->get_id(), '_regular_price', $new_price);            update_post_meta($product->get_id(), '_price', $new_price);            // Обновляем объект продукта для текущей сессии            $product->set_price($new_price);        }    }}

2. Обновляем кэш и перезапускаем пересчёт цен

Чтобы изменения вступили в силу, нужно сбросить кэш WooCommerce и пересчитать цены. Добавьте в конец функции:

wc_delete_product_transients( $product->get_id() );

Это сбросит кэшированную информацию о продукте.

3. Обработка возврата запасов

Если запас товара увеличится (например, при возврате), можно вернуть цену к исходной. Для этого используйте хук woocommerce_order_status_changed для отслеживания возвратов и обновления цены.

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

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

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

  • Цена не меняется после заказа: убедитесь, что хук woocommerce_reduce_order_stock подключён и код активен в functions.php или в плагине.
  • Изменения цены не видны на сайте: вероятно, кэш страниц или объектов блокирует обновление. Очистите кэш плагина кэширования и WooCommerce с помощью wc_delete_product_transients().
  • Проблемы с вариациями: для вариативных товаров нужно отдельно обновлять цены вариаций, получая объект вариации через wc_get_product( $variation_id ).
  • Ошибки с типами товаров, не управляющих запасом: добавьте проверку $product->managing_stock().

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

  • Не обновляйте цену в каждой транзакции без условий — это повысит нагрузку на базу данных.
  • Используйте transient API для кэширования результатов вычислений, если логика будет усложняться.
  • Всегда проверяйте права доступа и типы продуктов перед изменением мета-данных.
  • Резервируйте базу данных перед массовыми изменениями цен.

Сравнение подходов реализации

Метод Плюсы Минусы
Кастомный код (описанный выше) Гибкость, отсутствие дополнительных плагинов, точечное решение Нужно тестировать, требует навыков программирования
Плагин динамического ценообразования (например, WooCommerce Dynamic Pricing) Быстрая настройка, много условий, поддержка Платные решения, нагрузка на сайт, избыточность для простой задачи
Ручное изменение цен в админке Простота, не требует кода Неавтоматизировано, ошибки человеческого фактора
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше