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

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

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

Какие показатели нужно проверить перед настройкой

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

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

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

Пример кода для простых товаров (functions.php темы или плагина):

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

    // Порог остатков
    $stock_threshold = 5;
    // Процент изменения цены (например, скидка 20%)
    $discount_percentage = 20;

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->managing_stock()) continue;

        $stock_quantity = $product->get_stock_quantity();

        if ($stock_quantity <= $stock_threshold && $stock_quantity > 0) {
            $original_price = $product->get_regular_price();
            $new_price = $original_price * (1 - $discount_percentage / 100);
            $cart_item['data']->set_price($new_price);
        }
    }
}

Этот код применит скидку 20%, если остаток товара 5 или меньше, при добавлении в корзину.

Изменение цены на странице товара

Чтобы покупатель видел изменённую цену сразу, используйте фильтр:

add_filter('woocommerce_get_price', 'modify_price_display_based_on_stock', 10, 2);
function modify_price_display_based_on_stock($price, $product) {
    $stock_threshold = 5;
    $discount_percentage = 20;

    if ($product->managing_stock()) {
        $stock_quantity = $product->get_stock_quantity();
        if ($stock_quantity <= $stock_threshold && $stock_quantity > 0) {
            $price = $product->get_regular_price() * (1 - $discount_percentage / 100);
        }
    }

    return $price;
}

Проверка результата

  • Добавьте в WooCommerce товар с остатком 5 или меньше
  • Откройте страницу товара и проверьте, что цена изменилась согласно заданной логике
  • Добавьте товар в корзину, перейдите к оформлению заказа и убедитесь, что цена в корзине совпадает с изменённой
  • Измените остаток товара выше порога и проверьте, что цена возвращается к исходной

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

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

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

  • Не изменяйте цены напрямую в базе данных — используйте хуки WooCommerce для динамических изменений.
  • Для больших магазинов с сотнями товаров реализация на стороне PHP должна быть оптимизирована, чтобы избежать излишней нагрузки на сервер.
  • Если используете кэширование страниц (например, через плагин), исключите страницы корзины и товара из кэширования, чтобы динамическая цена отображалась корректно.
  • Тестируйте обновления WooCommerce — API и хуки могут меняться, что повлияет на работу кастомных функций.

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

МетодПреимуществаНедостаткиПример кода
Хук woocommerce_before_calculate_totals (корзина) Изменяет цену только в корзине и оформлении, безопасно Цена на странице товара не меняется, пользователь может быть не информирован Да (пример выше)
Фильтр woocommerce_get_price (отображение цены) Меняет цену на странице товара, пользователь видит актуальную цену Не меняет цену в заказе по умолчанию, нужно дополнительно менять в корзине Да (пример выше)
Изменение цены в базе данных Постоянное изменение цены, подходит для длительных акций Риск ошибок, требует отката изменений, может сломать отчёты и аналитику Не рекомендуется

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое удаление заказов по неактивности и статусу
13.09.2026
Как автоматизировать создание резервных копий в WordPress с помощью плагинов и кода
09.09.2026
Оптимизация базы данных WordPress: практические советы и примеры кода
24.09.2026
Как закрыть от индексации страницы авторов и архивы дат в WordPress
18.08.2026
Как настроить использование Transient API в WordPress для эффективного кэширования
28.08.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »