WooCommerce: как автоматически изменять цену товара после покупки в GeneratePress

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

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

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

1. Используем хук woocommerce_order_status_completed

Этот хук срабатывает, когда заказ переводится в статус «завершен» — оптимальный момент для внесения изменений в товар.

2. Получаем товары из заказа и меняем их цены

Мы перебираем все товары заказа, определяем ID и обновляем цену в базе данных.

add_action('woocommerce_order_status_completed', 'gp_change_product_price_after_purchase', 10, 1); 
function gp_change_product_price_after_purchase($order_id) {
    if (!$order_id) return;
    
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        $product = wc_get_product($product_id);
        if (!$product) continue;

        // Текущая цена
        $current_price = $product->get_regular_price();
        
        // Логика изменения цены: например, уменьшаем на 10%
        $new_price = round($current_price * 0.9, 2);

        // Обновляем цену
        $product->set_regular_price($new_price);
        $product->save();
    }
}

3. Кэширование и очистка

После изменения цены стоит очистить кэш WooCommerce и плагинов кеширования, чтобы изменения отобразились сразу. Например, вызовом wp_cache_flush() или через админку.

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

  • Оформите тестовый заказ с покупкой нужного товара.
  • Переведите заказ в статус «завершен» (если не происходит автоматически).
  • Перейдите в админку WooCommerce > Товары и проверьте цену изменённого товара: она должна быть меньше на 10% от исходной.
  • Внешний вид товара на сайте также должен показывать обновлённую цену.

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

  • Цена не изменяется после покупки: Проверьте, что заказ действительно в статусе «завершен». Если используется другой статус, замените хук на woocommerce_order_status_processing или подходящий.
  • Изменения не видны из-за кэширования: Очистите кэш сайта, браузера и плагинов кеширования.
  • Цена меняется, но не сохраняется: Убедитесь, что у вас права на запись в базу. Проверьте логи ошибок PHP.
  • Изменение цены влияет на все вариации товара: Если у товара есть вариации, добавьте проверку на тип товара и меняйте цену каждой вариации отдельно.

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

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

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

МетодОписаниеПлюсыМинусы
Прямое изменение цены товара через кодМеняем цену в объекте продукта на хук завершения заказаПростота реализации, работает сразуИзменение цены влияет на всех покупателей, риск ошибок при обновлении
Изменение цены на уровне корзины/сессииИспользуем хуки woocommerce_before_calculate_totals для динамической ценыЦена меняется только для конкретного пользователя и заказаНе сохраняется в базе, не влияет на постоянную цену товара
Использование мета-полей и кастомной логики для скидокХранение правил в мета-полях и применение через фильтры ценыГибкость, можно создавать сложную логикуТребует более сложной реализации
Как добавить отложенную загрузку картинок в GeneratePress для ускорения сайта
23.01.2026
WooCommerce: как добавить кастомный атрибут товара с помощью кода в GeneratePress
05.06.2026
WooCommerce: как отключить комментарии и оценки на странице товара в GeneratePress
01.07.2026
WooCommerce: как изменить текст подтверждения заказа в GeneratePress
17.05.2026
Как добавить поддержку плюшевого тёмного режима в GeneratePress
15.04.2026