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

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

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

Типичные признаки проблемы:

  • Цена товара не отражает специальные условия после заказа (скидки, бонусы, доплата).
  • Статус товара не меняется на «нет в наличии» при ограниченных запасах.
  • Отсутствие обновления данных товара в админке после успешной оплаты.

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

1. Использование хука woocommerce_thankyou для запуска кода после успешного заказа

Хук woocommerce_thankyou срабатывает после оформления заказа и подходит для модификации данных товара.

add_action('woocommerce_thankyou', 'custom_update_product_after_order', 10, 1);

2. Реализация функции обновления цены и наличия

В функции получаем заказ, перебираем товары, меняем цену и наличие.

function custom_update_product_after_order($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        $product = wc_get_product($product_id);
        if (!$product) continue;

        // Пример: уменьшаем цену на 10% после заказа
        $regular_price = floatval($product->get_regular_price());
        $new_price = $regular_price * 0.9;
        $product->set_price($new_price);
        $product->set_regular_price($new_price);

        // Пример: меняем статус наличия на "нет в наличии"
        $product->set_stock_status('outofstock');

        $product->save();
    }
}

3. Размещение кода

Добавьте этот код в functions.php вашей дочерней темы или в отдельный плагин, чтобы изменения были постоянными и не слетели при обновлении.

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

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

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

  • Ничего не меняется после заказа
    Проверьте, вызывается ли функция: добавьте error_log('custom_update_product_after_order вызван'); в функцию и смотрите логи PHP. Возможно, хук не срабатывает из-за кеширования или конфликтов.
  • Изменения в цене не отображаются на сайте
    Очистите кеш сайта и браузера. Если используется кэширование на уровне сервера (например, Varnish, Redis), обновите его.
  • Наличие не меняется
    Убедитесь, что у товара включён учёт запасов (manage_stock = true). Иначе статус наличия не обновится.
  • Ошибка при сохранении продукта
    Проверьте права пользователя и отсутствие конфликтов с другими плагинами, которые могут блокировать сохранение данных.

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

  • Не используйте тяжелые запросы в функции, вызываемой по хуку woocommerce_thankyou, чтобы не замедлять процесс оформления заказа.
  • Проверяйте права доступа, если функция расширяется для фронтенд-запросов или AJAX.
  • Для сложного пересчёта цен лучше использовать встроенные фильтры WooCommerce, например, woocommerce_product_get_price, чтобы не менять базовые данные товара.
  • Для массового обновления товаров после заказа лучше запланировать очередь через WP-Cron, чтобы избежать блокировки пользователя.

Сравнение методов изменения цены и наличия товара

МетодПлюсыМинусы
Изменение внутри woocommerce_thankyouПростота реализации, мгновенный эффектРиск замедления оформления заказа, возможны конфликты
Использование WP-Cron для отложенного обновленияНе влияет на время оформления заказа, безопасно для большого объёмаМожет быть задержка обновления, сложнее в реализации
Фильтры для динамического изменения цены (без сохранения)Не меняет базу данных, удобно для скидокНе меняет статус наличия, ограничен функционал
Как добавить дополнительные поля в регистрацию WordPress с помощью хуков
14.01.2026
WooCommerce: автоматическое изменение стоимости товара при определённых условиях
03.05.2026
Как избежать конфликтов между плагинами WordPress: практические советы и кодовые примеры
03.04.2026
Как использовать REST API в WordPress для расширения функционала
21.11.2025
Как автоматизировать удаление старого контента в WordPress
25.02.2026

На оформлении, скоро здесь появится полноценный ресурс