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

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

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

Понимание структуры вариативных товаров WooCommerce

Вариативный товар — это основной продукт с типом variable, у которого есть дочерние записи типа variation. Цены хранятся в метаполях вариаций: _price, _regular_price, _sale_price. Чтобы изменить цены, нужно работать именно с дочерними вариациями, обновляя их метаданные.

Почему нельзя просто менять цену основного товара

Цена основного товара служит для отображения минимальной цены вариаций и не влияет на фактическую стоимость каждой вариации. Для точного управления ценами нужно менять значения в вариациях.

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

Рассмотрим пример, как увеличить цены всех вариаций на 10% при сохранении товара.

add_action('woocommerce_save_product_variation', 'auto_update_variation_price', 10, 2);function auto_update_variation_price($variation_id, $i) {  $variation = wc_get_product($variation_id);  if (!$variation || $variation->get_type() !== 'variation') {    return;  }  $regular_price = floatval($variation->get_regular_price());  if ($regular_price > 0) {    $new_price = $regular_price * 1.10; // увеличить на 10%    $variation->set_regular_price($new_price);    $variation->set_price($new_price);    $variation->save();  }}

Этот код срабатывает при сохранении вариации в админке и увеличивает цену на 10%. Можно адаптировать под любые условия.

Автоматическое обновление всех вариаций существующего товара

Если нужно массово обновить цены всех вариаций уже опубликованного товара, используйте следующий код:

function update_all_variations_price($product_id, $multiplier = 1.10) {  $product = wc_get_product($product_id);  if (!$product || $product->get_type() !== 'variable') {    return false;  }  $variations = $product->get_children();  foreach ($variations as $variation_id) {    $variation = wc_get_product($variation_id);    $regular_price = floatval($variation->get_regular_price());    if ($regular_price > 0) {      $new_price = $regular_price * $multiplier;      $variation->set_regular_price($new_price);      $variation->set_price($new_price);      $variation->save();    }  }  return true;}

Вызывайте update_all_variations_price(123);, где 123 — ID вариативного товара.

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

  • В админке WooCommerce откройте вариации товара и убедитесь, что цены изменились согласно логике.
  • На фронтенде сайта проверьте отображение цен вариаций, убедитесь, что цены действительно обновились.
  • Для отладки можно добавить временный error_log() в функции и просмотреть логи PHP.

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

  • Цены не меняются на фронтенде: Проверьте, что вызываете $variation->save() после установки новых цен.
  • Ошибка при получении продукта: Убедитесь, что используется правильный ID вариации, а не самого товара.
  • Изменения откатываются: Возможно, другие хуки или плагины перезаписывают цены. Проверьте порядок вызова функций через приоритеты хуков.
  • Кэширование мешает обновлению: Очистите кэш сайта и браузера, отключите плагины кэширования на время.

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

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

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

МетодПреимуществаНедостаткиПример использования
Ручное редактирование вариацийПростота, нет кодаТрудоемко, не подходит для массовых измененийАдминка WooCommerce
Код на хуках (как в статье)Автоматизация, гибкость, интеграция с процессамиТребует навыков разработки, риски ошибокФункция на woocommerce_save_product_variation
Плагины массового обновления ценУдобный интерфейс, готовое решениеМогут быть платными, дополнительные нагрузкиWooCommerce Bulk Edit, Advanced Bulk Edit
WooCommerce: автоматическое изменение стоимости товаров при акциях через функции и хуки
19.05.2026
Как изменить URL адрес постов в WordPress без перенаправлений
02.01.2026
WooCommerce: как диагностировать и исправить проблему с отказывающимися платежами
04.06.2026
WooCommerce: настройка подтверждения отзывов через email для улучшения качества и надежности
28.04.2026
Как удалить или изменить атрибуты изображений в WordPress без плагинов
31.03.2026