Автоматическое изменение стоимости товаров в WooCommerce при снижении остатка на складе

Почему важно автоматически менять цену при снижении остатков

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

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

  • Часто ли у вас меняются остатки товаров, и требуется ли мгновенно корректировать цены?
  • Возникают ли ситуации, когда цена не актуальна из-за изменения запасов?
  • Есть ли необходимость повысить цену при малом остатке для увеличения маржи?

Если ответ «да» хотя бы на один пункт, стоит настроить автоматическое обновление цен.

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

1. Добавляем хук на изменение запаса

WooCommerce предоставляет хук woocommerce_reduce_order_stock и фильтр woocommerce_product_get_price, но для оперативного изменения цены при обновлении запаса лучше использовать событие сохранения товара.

2. Пример кода для функции обновления цены

add_action('woocommerce_product_set_stock', 'update_price_on_low_stock', 10, 1); 
function update_price_on_low_stock($product) {
    $low_stock_threshold = 5; // Порог для снижения остатка
    $increase_percent = 20; // Процент увеличения цены

    if (!$product->managing_stock()) {
        return;
    }

    $stock_quantity = $product->get_stock_quantity();
    $regular_price = floatval($product->get_regular_price());

    if ($stock_quantity <= $low_stock_threshold && $stock_quantity > 0) {
        $new_price = $regular_price * (1 + $increase_percent / 100);
        $product->set_price($new_price);
        $product->save();
    } elseif ($stock_quantity > $low_stock_threshold) {
        // Возвращаем цену к регулярной, если запас восстановлен
        $product->set_price($regular_price);
        $product->save();
    }
}

В этом коде цена товара увеличивается на 20%, если остаток меньше или равен 5. При восстановлении запаса цена возвращается к исходной.

3. Альтернативный подход: изменение цены в корзине через фильтр

Если менять цену товара в самом каталоге неудобно, можно динамически изменять цену в корзине:

add_action('woocommerce_before_calculate_totals', 'dynamic_price_by_stock');
function dynamic_price_by_stock($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        $stock_quantity = $product->get_stock_quantity();
        $low_stock_threshold = 5;
        $increase_percent = 20;

        if ($stock_quantity <= $low_stock_threshold && $stock_quantity > 0) {
            $regular_price = floatval($product->get_regular_price());
            $new_price = $regular_price * (1 + $increase_percent / 100);
            $product->set_price($new_price);
        }
    }
}

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

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

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

  • Цена не меняется после обновления запаса: Проверьте, что у товара включено управление запасами (manage_stock должно быть true).
  • Изменения цены не отображаются в корзине: Возможно, кэширование страниц мешает — очистите кэш и проверьте работу на чистом браузере.
  • Цена меняется, но не сохраняется после перезагрузки: Убедитесь, что вызывается метод $product->save().
  • Ошибка из-за неправильного типа объекта: В хуках проверяйте, что передается объект продукта WC_Product, а не ID.

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

  • Не вызывайте $product->save() внутри циклов без необходимости — это может нагрузить базу.
  • Для массового обновления цен лучше использовать WP-CLI или отдельные задачи cron.
  • Проверяйте, что изменения цен не конфликтуют с другими плагинами, например, скидками или динамическими ценами.
  • Используйте nonce и проверки прав, если добавляете интерфейс для управления порогами или процентами.

Сравнение способов реализации динамического изменения цены

МетодПлюсыМинусыКомпромисс
Изменение цены товара (изменение объекта WC_Product) Цена видна повсеместно, включая каталог и карточку товара Может замедлить админ-панель, требует сохранения продукта Подходит для редких обновлений
Изменение цены в корзине через фильтр Быстро, не меняет цену в каталоге, не требует сохранения Цена в каталоге не меняется, только в корзине Подходит для временных акций и динамических скидок
Использование плагинов динамического ценообразования Простая настройка без кода, дополнительные функции Может быть дорого, перегружать сайт Если нужна комплексная логика ценообразования
Автоматизация создания и удаления черновиков в WordPress
24.03.2026
Как использовать REST API в WordPress для каталогов товаров
12.01.2026
Автоматическое удаление старого контента в WordPress
13.04.2026
Как создать динамические виджеты WordPress с помощью кода
09.04.2026
Автоматическое удаление старых медиафайлов в WordPress
03.04.2026