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

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

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

Основные хуки для изменения цены товара в WooCommerce

Чтобы динамически менять цену товара после покупки, нам нужна точка входа после оформления заказа. Обычно это хук woocommerce_order_status_completed, который срабатывает при переводе заказа в статус «завершён».

Далее через ID купленных товаров изменяем цену в метаполях товара (например, _regular_price и _price).

Пример кода для снижения цены товара на 10% после первой покупки

add_action('woocommerce_order_status_completed', 'change_price_after_purchase', 10, 1); function change_price_after_purchase($order_id) {  $order = wc_get_order($order_id);  if (!$order) return;  foreach ($order->get_items() as $item_id => $item) {    $product = $item->get_product();    if (!$product || $product->is_type('variable')) continue; // пропускаем вариативные    $product_id = $product->get_id();    $regular_price = (float) $product->get_regular_price();    if ($regular_price <= 0) continue;    $new_price = round($regular_price * 0.9, 2); // минус 10%    update_post_meta($product_id, '_regular_price', $new_price);    update_post_meta($product_id, '_price', $new_price);    $product->set_price($new_price);    $product->save();  }}

Пошаговое решение: как реализовать и проверить

  1. Добавьте код в functions.php дочерней темы GeneratePress или в отдельный плагин.
  2. Создайте тестовый товар с ценой от 100 рублей.
  3. Создайте заказ и доведите его статус до «завершён».
  4. Проверьте, что цена товара изменилась в админке WooCommerce и на фронте.
  5. Очистите кэш сайта и браузера перед проверкой.

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

  • В панели администрирования WooCommerce откройте редактирование товара и убедитесь, что цена уменьшилась на 10%.
  • На странице товара на сайте должна отображаться новая цена.
  • Создайте ещё один заказ с этим товаром, чтобы увидеть, что цена не меняется повторно (если требуется).

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

  • Цена не меняется после покупки: проверьте, что хук woocommerce_order_status_completed срабатывает. Можно добавить error_log внутри функции для отладки.
  • Изменяется цена вариативного товара: в коде есть фильтр, но если вариативные товары не исключены, это может привести к ошибкам.
  • Кэш страницы мешает увидеть изменения: очистите кэш или отключите кэширование на время теста.
  • Цена изменяется для всех товаров без условий: добавьте дополнительные проверки, например, только для определённых категорий или пользователей.

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

  • Не изменяйте цены товаров напрямую без резервного копирования базы данных.
  • Используйте дочернюю тему GeneratePress для внесения изменений, чтобы не потерять их при обновлении.
  • Если планируется массовое изменение цен, рассмотрите создание отдельного сервиса или WP-CLI скрипта.
  • Добавьте проверку прав пользователя и статуса заказа, чтобы избежать случайных изменений.
  • Для сложных правил ценообразования лучше использовать специализированные плагины.

Сравнение способов автоматического изменения цены товара

МетодОписаниеПлюсыМинусы
Код в functions.php (через хуки WooCommerce)Написать функцию, которая меняет цену после статуса заказаЛегко кастомизировать, бесплатно, гибкоТребует навыков программирования, риск ошибок
Плагин динамического ценообразованияИспользовать готовый плагин для скидок и изменения ценПростой в использовании, много функцийМожет быть платным, избыточным для простой задачи
WP-CLI скриптИзменять цены через командную строкуУдобно для массовых измененийНужен доступ к серверу, сложнее для новичков
Как удалить ненужные скрипты и стили в GeneratePress для оптимизации загрузки сайта
24.03.2026
Как добавить автоматическую подгрузку постов в GeneratePress для бесконечной прокрутки
03.02.2026
Как добавить динамические атрибуты в GeneratePress для успешного SEO
24.02.2026
WooCommerce: как автоматически очищать корзину после успешной оплаты в GeneratePress
21.05.2026
WooCommerce: как добавить кастомный атрибут товара с помощью кода в GeneratePress
05.06.2026