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

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

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

Выбор подхода: плагин vs код

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

  • Плагины динамического ценообразования с поддержкой условий по запасам (но они часто комплексные и платные)
  • Кастомный код с использованием хуков WooCommerce для контроля остатков и обновления цен

Ниже рассмотрим практический пример на PHP с использованием стандартных хуков WooCommerce.

Пошаговое решение: автоматическое изменение цены через хук обновления остатков

1. Создаем функцию для изменения цены товара

Будем менять цену, когда остаток товара опустится ниже установленного порога.

function wpcatalog_adjust_price_on_stock_change( $product_id ) {
    $product = wc_get_product( $product_id );
    if ( ! $product || ! $product->managing_stock() ) {
        return;
    }

    $stock_quantity = $product->get_stock_quantity();
    $threshold = 10; // Порог остатка
    $original_price = floatval( $product->get_regular_price() );

    if ( $stock_quantity !== null && $stock_quantity < $threshold ) {
        // Уменьшаем цену на 10% при низком остатке
        $new_price = round( $original_price * 0.9, 2 );
    } else {
        // Возвращаем оригинальную цену
        $new_price = $original_price;
    }

    if ( $new_price != $product->get_price() ) {
        $product->set_price( $new_price );
        $product->save();
    }
}

2. Привязываем функцию к событию обновления остатков

WooCommerce не имеет прямого хука для изменения остатка, поэтому используем woocommerce_product_set_stock (доступен с версии 3.0).

add_action( 'woocommerce_product_set_stock', 'wpcatalog_adjust_price_on_stock_change', 10, 1 );

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

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

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

  • Функция не срабатывает при изменении остатка: Проверьте, что используется актуальный хук woocommerce_product_set_stock. Если остатков не меняют через стандартный метод, хук не вызовется.
  • Цена не меняется или меняется некорректно: Убедитесь, что в админке у товара включено управление остатками (manage_stock = true). Также проверьте правильность типов данных (float для цены).
  • Конфликты с кэшированием: После обновления цены очистите кэш сайта и браузера, иначе увидите старую цену.
  • Проблемы с вариациями: Для вариативных товаров нужно отдельно реализовывать логику для каждого варианта, так как у них свои ID и остатки.

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

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

Сравнение подходов к автоматическому изменению цены товара при снижении остатка

МетодПлюсыМинусыРекомендуется для
Плагины динамического ценообразованияГотовое решение, гибкие правилаМогут быть дорогими, избыточны для простой задачиСложные условия, много товаров
Кастомный код на хуках WooCommerceЛегко адаптировать, нет дополнительных затратТребует навыков разработки, может влиять на производительностьПростые правила, небольшие каталоги
WooCommerce: автоматическое отключение товаров при отсутствии запасов в настройках складского учёта
08.07.2026
Как избежать конфликтов между плагинами WordPress: практические решения
05.12.2025
Как удалить повторяющиеся товары в WooCommerce без плагинов
24.05.2026
WooCommerce: автоматический возврат денег после отмены заказа — настройка и устранение проблем
04.06.2026
WordPress автоматическое создание бэкапов: лучшие плагины и примеры кода
28.11.2025