WooCommerce: автоматическое изменение стоимости товаров по расписанию

Проблема: необходимость периодического изменения цен в WooCommerce

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

Диагностика задачи: что нужно учесть

  • Какие товары должны изменяться: все, категории, отдельные товары или по мета-данным.
  • Тип изменения: фиксированная скидка, процент, установка новой цены.
  • Периодичность: ежедневное, еженедельное, однократное изменение.
  • Влияние на кэш и индексацию.
  • Необходимость отката цен после акции.

Пошаговое решение: реализация автоматического изменения цен с помощью WP-Cron и хуков WooCommerce

1. Создание функции для изменения цены товара

Для примера реализуем изменение цены всех товаров определённой категории, уменьшая цену на 10%.

function wpassist_change_product_prices() {
    $args = [
        'status' => 'publish',
        'limit' => -1,
        'category' => ['sale-category'], // укажите slug категории
    ];
    $products = wc_get_products($args);

    foreach ($products as $product) {
        $regular_price = $product->get_regular_price();
        if (!$regular_price) continue;

        $new_price = $regular_price * 0.9; // скидка 10%
        $product->set_sale_price($new_price);
        $product->save();
    }
}

2. Регистрация события WP-Cron для запуска по расписанию

Добавим еженедельное событие, запускающее функцию изменения цен.

function wpassist_schedule_price_update() {
    if (!wp_next_scheduled('wpassist_update_prices_event')) {
        wp_schedule_event(time(), 'weekly', 'wpassist_update_prices_event');
    }
}
add_action('wp', 'wpassist_schedule_price_update');

add_action('wpassist_update_prices_event', 'wpassist_change_product_prices');

3. Добавление отмены акции (сброс цен) по аналогии

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

function wpassist_reset_product_prices() {
    $args = [
        'status' => 'publish',
        'limit' => -1,
        'category' => ['sale-category'],
    ];
    $products = wc_get_products($args);

    foreach ($products as $product) {
        $product->set_sale_price('');
        $product->save();
    }
}

// Аналогично можно добавить wp_schedule_event для отмены по расписанию

Проверка результата

  • Перейдите в админку WooCommerce, откройте список товаров категории "sale-category" и убедитесь, что у них появилась скидочная цена (sale price) с уменьшенной на 10% стоимостью.
  • Проверьте фронтенд — цена товара должна отображаться с учётом скидки.
  • Для проверки работы WP-Cron можно использовать плагин WP Crontrol или запустить событие вручную с помощью do_action('wpassist_update_prices_event');.

Частые ошибки и способы их устранения

  • WP-Cron не запускается: на некоторых хостингах требуется настроить системный cron или использовать плагин для имитации запуска.
  • Неверно указана категория: убедитесь, что slug категории указан правильно в параметре 'category'.
  • Цена не меняется: проверьте, что у товаров задана регулярная цена, и что метод save() вызывается после изменения.
  • Проблемы с кэшированием: после изменения цен очистите кеш страниц и объектный кеш, если используется (Redis, Memcached).

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

  • Не выполняйте массовое обновление цен на страницах с высокой нагрузкой — используйте WP-Cron или CLI.
  • Добавьте проверку nonce и прав пользователя, если запускаете изменение из админки.
  • Оптимизируйте выборку продуктов для ускорения работы — избегайте выборки слишком большого количества товаров за раз.
  • Для больших магазинов используйте пакетную обработку (batch processing), чтобы избежать таймаутов.

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

МетодПреимуществаНедостатки
WP-Cron + PHP кодГибкость, нет зависимости от плагинов, можно полностью контролировать логикуЗависит от корректной работы WP-Cron, возможны таймауты при большом объёме
Плагины скидок и акцийУдобный интерфейс, готовые функции, поддержка от разработчиковМожет быть тяжеловесным, не всегда гибко настраивается под сложные задачи
Внешние скрипты и CLIПроизводительность, надежность, можно запускать по cron напрямуюТребует доступа к серверу, навыков CLI, сложнее интегрировать с UI
WooCommerce: автоматическое изменение стоимости товаров по расписанию
29.05.2026
Как создать простой shortcode в WordPress с применением
04.11.2025
Как отключить AJAX загрузку товаров в WooCommerce
06.12.2025
WooCommerce: как автоматически отключать неактивные товары по времени
13.07.2026
Отложенная загрузка картинок в WordPress: как ускорить сайт и снизить нагрузку
17.01.2026