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

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

Часто в WooCommerce требуется автоматически менять цену товара при наличии акции, чтобы избежать ручного обновления цен. Если вы столкнулись с тем, что цены не меняются по запланированному условию, проверьте следующие моменты:

  • Акционные цены заданы в поле sale_price товара, а не просто в описании.
  • Нет конфликтов с другими плагинами, которые могут перезаписывать цены.
  • Кэш сайта и браузера очищен — иногда старый кэш показывает устаревшую цену.
  • Правильно настроены даты начала и окончания акции (поля date_on_sale_from и date_on_sale_to).

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

1. Использование хука для программного обновления цен

Чтобы автоматически менять цену товара при заданном условии, используйте хук save_post или крон-задачи. Ниже пример кода, который устанавливает скидку 20% для всех товаров из определённой категории "sale":

function update_sale_price_for_category() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'tax_query'      => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => 'sale',
            ),
        ),
    );
    $products = get_posts($args);
    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        $regular_price = floatval($product->get_regular_price());
        if ($regular_price > 0) {
            $sale_price = round($regular_price * 0.8, 2); // скидка 20%
            $product->set_sale_price($sale_price);
            $product->save();
        }
    }
}
// Запускайте функцию вручную или привяжите к крону
// update_sale_price_for_category();

2. Автоматизация с помощью WP-Cron

Для автоматического применения скидок ежедневно добавьте задачу в WP-Cron:

add_action('wp', function() {
    if (!wp_next_scheduled('daily_update_sale_prices')) {
        wp_schedule_event(time(), 'daily', 'daily_update_sale_prices');
    }
});
add_action('daily_update_sale_prices', 'update_sale_price_for_category');

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

  • Откройте товар из категории "sale" в админке и проверьте, что поле Sale price заполнено с учётом скидки.
  • На фронтенде очистите кэш и обновите страницу товара — цена должна измениться согласно скидке.
  • Проверьте логи ошибок PHP, если цены не обновляются.

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

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

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

  • Не запускайте функцию обновления цен на каждом запросе — используйте WP-Cron или админские действия.
  • Для больших магазинов делайте обновление партиями, чтобы избежать таймаутов сервера.
  • Добавляйте проверки и логирование для отладки — например, записывайте IDs обновлённых товаров в лог.
  • Очищайте кэш WooCommerce после обновления цен программно:
function clear_wc_cache_after_price_update() {
    wc_delete_product_transients();
}
add_action('update_postmeta', 'clear_wc_cache_after_price_update');

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

СпособПреимуществаНедостатки
Ручное обновлениеПростота, полный контрольТрудозатратно, риск ошибок
WP-Cron с кастомным скриптомАвтоматизация, гибкостьЗависимость от запуска WP-Cron, нагрузка при большом количестве товаров
Плагины скидокГотовые решения, удобствоМогут влиять на производительность, лишние зависимости
Как настроить автоматический импорт данных из Google Sheets в WordPress с примерами кода
15.02.2026
WooCommerce: автоматическое изменение стоимости товара при определённых условиях
03.05.2026
Как разрешить отправку формы только авторизованным пользователям в WordPress
11.01.2026
Автоматическое удаление неактивных пользователей WordPress
08.02.2026
Автоматическое удаление старого контента в WordPress по дате и категории
21.03.2026