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

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

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

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

1. Использование хука woocommerce_order_status_completed

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

2. Пример кода для изменения цены определённого товара после оплаты

add_action('woocommerce_order_status_completed', 'custom_change_product_price_after_payment', 10, 1); function custom_change_product_price_after_payment($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;          // Новая цена, например уменьшаем на 10%         $old_price = $product->get_regular_price();         $new_price = $old_price * 0.9;          // Обновляем цену товара         $product->set_regular_price($new_price);         $product->save();     } }

В этом примере после завершения заказа у каждого товара из заказа цена уменьшается на 10%. Это демонстрация, в реальности логику можно менять под задачи.

Как проверить, что изменение цены сработало

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

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

  • Изменение цены не происходит
    Проверьте, что хук woocommerce_order_status_completed действительно срабатывает. Можно добавить error_log('Hook triggered'); для отладки.
  • Цена изменяется, но не отображается на сайте
    Очистите кеш сайта и браузера, иногда WooCommerce кэширует цены.
  • Изменение цены влияет на исторические заказы
    Если нужно менять цену только для будущих заказов, а не текущих, меняйте цену отдельно через пользовательские поля или метаданные, а не в объекте товара напрямую.
  • Изменение цены влияет на все варианты товара, когда нужно только на конкретный
    Убедитесь, что используете правильный ID варианта ($item->get_variation_id()) если это вариативный товар.

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

  • Не изменяйте цены товара слишком часто и массово — это может привести к потере данных или конфликтам при одновременных заказах.
  • Сохраняйте резервные копии базы перед массовыми изменениями цен.
  • Для сложных логик изменения цен используйте отдельные пользовательские поля или теги, а не меняйте основную цену товара.
  • Используйте транзакции базы данных или wpdb для более надежного обновления, если работаете с большим количеством товаров.

Альтернативы: плагин vs код vs компромисс

ВариантПлюсыМинусы
Свой код на хукеПолный контроль, нет нагрузки плагиновТребует навыков, возможны ошибки
Использование плагина динамического ценообразованияГотовое решение, поддержкаМожет быть тяжеловесным, не всегда гибок
Компромисс: код + легкий плагинБыстрая реализация с кастомизациейНужно следить за совместимостью
Как успешно обновлять WooCommerce без потери данных
26.04.2026
WooCommerce: как автоматизировать отправку кастомных писем после оформления заказа
14.07.2026
Как добавить владельца постов в REST API WordPress
14.03.2026
WooCommerce: как правильно автоматически изменять стоимость товаров после оплаты
23.06.2026
WooCommerce: как собрать и очистить базу данных от зависших вариантов и вариантов с нулевым запасом
04.06.2026