Автоматическое изменение цены товара при обновлении в WooCommerce

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

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

Задача: реализовать автоматическое изменение цены товара при его обновлении в админке или через импорт, используя встроенные хуки WooCommerce и WordPress.

Выбор подходящего хука для автоматического изменения цены

Для изменения цены при обновлении товара используется хук save_post_product — вызывается при сохранении записи типа product. Он позволяет получить объект товара, проверить данные и изменить цену программно.

Важно: изменение цены в этом хуке должно происходить корректно, чтобы не возникало бесконечных циклов сохранения.

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

add_action('save_post_product', 'auto_update_product_price', 20, 3); function auto_update_product_price($post_ID, $post, $update) { 	// Проверяем, что это обновление, а не создание нового товара 	if (!$update) return; 	// Получаем объект товара 	$product = wc_get_product($post_ID); 	if (!$product) return; 	// Получаем текущую цену 	$current_price = floatval($product->get_regular_price()); 	// Логика изменения цены - например, прибавляем 10% 	$new_price = $current_price * 1.10; 	// Округляем до двух знаков 	$new_price = round($new_price, 2); 	// Если цена изменилась, обновляем 	if ($new_price !== $current_price) { 		$product->set_regular_price($new_price); 		$product->save(); 	} }

Пошаговое решение: как внедрить и протестировать

  1. Подключитесь к сайту по FTP или через редактор тем.
  2. Добавьте приведённый выше код в файл functions.php вашей дочерней темы или в отдельный плагин.
  3. Перейдите в админку WooCommerce и отредактируйте существующий товар.
  4. Сохраните товар и проверьте, изменилась ли цена на 10% больше.
  5. Если вы используете импорт товаров, убедитесь, что после импорта цены также автоматически обновляются (при условии, что происходит триггер сохранения товара).

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

  • Откройте любой товар для редактирования в админке и сохраните его без изменений.
  • Проверьте цену — она должна увеличиться на 10%.
  • Для контроля добавьте логирование в функцию, например, error_log(), чтобы отследить срабатывание кода.
  • Проверьте на фронтенде, что цена отображается корректно.

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

  • Бесконечный цикл сохранения товара. Если в хуке save_post_product вы вызываете $product->save() без условий, это может вызвать повторное срабатывание хука. Решение: вызывайте save() только если цена действительно изменяется, как в примере выше.
  • Неправильный тип записи. Убедитесь, что хук привязан именно к save_post_product, а не к save_post общего вида, чтобы не влиять на другие записи.
  • Ошибка при получении объекта товара. Функция wc_get_product() может вернуть false, если товар удалён или недоступен. Добавляйте проверку на объект.
  • Проблемы с импортом. Некоторые импортеры не вызывают стандартные хуки сохранения. В этом случае нужно либо доработать импорт, либо запускать отдельный скрипт для массового обновления цен.

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

  • Не используйте слишком сложные вычисления или запросы внутри хука save_post_product, чтобы не замедлять сохранение товара.
  • Добавьте проверку прав пользователя, если планируете запускать логику только для админов, например: if (!current_user_can('edit_product', $post_ID)) return;.
  • Логируйте изменения цены через error_log или собственный лог-файл для отладки.
  • Если нужно массовое изменение цен, лучше сделать отдельный WP-CLI скрипт или пакетный импорт с учетом новой логики.

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

МетодПлюсыМинусыПример
Хук save_post_productПростая реализация, срабатывает при обновлении товараРиск бесконечного цикла, не срабатывает при массовом импорте без сохраненияКод из статьи
WP-CLI скриптМассовое изменение без нагрузки на сайтТребует доступа к серверу, знания WP-CLIОтдельный PHP-скрипт
Плагин для импорта с фильтрамиУправление ценами при импортеЗависимость от стороннего плагинаПлагин WP All Import с PHP-правилами
Автоматическое отключение оплаты в WooCommerce при отмене заказа
03.07.2026
Как отладить проблемы с авторизацией через REST API в WordPress
20.03.2026
Как избежать проблем с переносом WordPress между серверами
05.04.2026
Как использовать метод pre_get_posts для контроля запросов в WordPress
17.06.2026
Как удалить защитные заголовки в WordPress для повышения безопасности
21.11.2025