WooCommerce: как изменить стоимость товара по времени с помощью WP-Cron

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

В WooCommerce иногда требуется автоматически менять стоимость товара в зависимости от времени суток, дня недели или специальных периодов (например, акция с 9:00 до 18:00). Стандартными средствами это реализовать сложно, а плагины для динамического ценообразования часто избыточны и влияют на производительность.

Если вы хотите реализовать смену цены товара по расписанию с минимальным количеством сторонних плагинов, WP-Cron — удобное решение.

Пошаговое решение: реализация изменения цены с WP-Cron

1. Создаем функцию для смены цены

Ниже пример функции, которая изменяет цену товара с ID 123 на заданную сумму:

function set_product_price_by_id($product_id, $new_price) {
    $product = wc_get_product($product_id);
    if (!$product) return false;

    $product->set_regular_price($new_price);
    $product->save();
    return true;
}

2. Регистрируем WP-Cron событие

Добавим расписание и событие, которое будет вызывать смену цены:

add_action('init', function() {
    if (!wp_next_scheduled('change_price_event')) {
        wp_schedule_event(time(), 'hourly', 'change_price_event');
    }
});

add_action('change_price_event', function() {
    $current_hour = (int) current_time('H');
    $product_id = 123; // ID товара

    if ($current_hour >= 9 && $current_hour < 18) {
        set_product_price_by_id($product_id, 1000); // Цена в рабочие часы
    } else {
        set_product_price_by_id($product_id, 1200); // Цена вне рабочего времени
    }
});

3. Добавление пользовательского расписания (если нужно)

По умолчанию WP-Cron поддерживает расписания 'hourly', 'twicedaily', 'daily'. Для более точного контроля можно добавить собственные интервалы:

add_filter('cron_schedules', function($schedules) {
    $schedules['every_15_minutes'] = [
        'interval' => 900, // 15 минут в секундах
        'display'  => __('Каждые 15 минут'),
    ];
    return $schedules;
});

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

  • Проверьте наличие запланированных задач через WP-CLI: wp cron event list --fields=hook,next_run. Должно быть событие change_price_event с запланированным временем.
  • В админке WooCommerce проверьте цену товара до и после смены времени. Можно временно подменить условие времени для быстрой проверки.
  • Для мгновенного теста вручную вызовите событие: do_action('change_price_event'); и проверьте изменение цены.

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

  • WP-Cron не срабатывает на сервере: Стандартный WP-Cron запускается при посещении сайта, что ненадежно. Для стабильной работы настройте системный cron job для вызова wp-cron.php каждые 5 минут.
  • Цена не меняется: Убедитесь, что ID товара указан правильно и продукт активен. Проверьте, что функция wc_get_product возвращает объект.
  • Изменение цены не отображается в магазине: Кеширование страницы может мешать видеть изменения. Очистите кеш сайта и браузера.
  • Событие WP-Cron дублируется: Проверьте, что создание cron события происходит один раз, например, только при инициализации темы или плагина, а не на каждом init.

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

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

Сравнение вариантов реализации изменения цены по времени

МетодПлюсыМинусы
WP-Cron + кастомный кодЛегко настроить, без сторонних плагинов, гибкоЗависит от посещаемости сайта, возможны задержки
Системный cron + кастомный кодТочный запуск, надежностьТребует доступа к серверу, настройка сложнее
Плагины динамического ценообразованияМного функций, готовые решенияДополнительная нагрузка, сложность, цена
Как использовать WP-Cron для автоматизации задач в WordPress
17.04.2026
Как использовать хуки в WordPress: подробное руководство с примерами
09.11.2025
Как отключить AJAX в WooCommerce без потери функциональности
26.05.2026
Как изменить стоимость доставки в WooCommerce в зависимости от роли пользователя
07.05.2026
Как избежать проблем с кешированием в WordPress: практические советы и решения
02.02.2026