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

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

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

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

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

Существуют плагины, например, Clearfy Pro и другие динамические цены, которые позволяют настроить расписание скидок и автоматом менять цены без кода. Но у них есть ограничения и стоимость лицензии.

2. Кастомное решение через wp-cron и прямое обновление цен

Если нужен точечный контроль и отсутствие сторонних зависимостей, можно написать собственный скрипт, который будет менять мета-данные цен товаров по расписанию с помощью системного cron или wp-cron WordPress.

Пошаговое решение: автоматическое изменение цены с помощью wp-cron

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

function wps_update_product_price_schedule() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_regular_price',
                'compare' => 'EXISTS',
            ],
        ],
    ];
    $products = new WP_Query($args);

    if ($products->have_posts()) {
        while ($products->have_posts()) {
            $products->the_post();
            $product_id = get_the_ID();
            $regular_price = get_post_meta($product_id, '_regular_price', true);
            // Пример: скидка 10% в период с 20:00 до 23:59
            $hour = (int) current_time('H');
            if ($hour >= 20 && $hour <= 23) {
                $new_price = round($regular_price * 0.9, 2);
            } else {
                $new_price = $regular_price;
            }
            update_post_meta($product_id, '_price', $new_price);
            update_post_meta($product_id, '_sale_price', ($new_price < $regular_price) ? $new_price : '');
        }
        wp_reset_postdata();
    }
}

Шаг 2. Регистрируем wp-cron событие

function wps_register_price_update_cron() {
    if (! wp_next_scheduled('wps_price_update_event')) {
        wp_schedule_event(time(), 'hourly', 'wps_price_update_event');
    }
}
add_action('wp', 'wps_register_price_update_cron');
add_action('wps_price_update_event', 'wps_update_product_price_schedule');

Шаг 3. Очистка cron при деактивации

function wps_clear_price_update_cron() {
    $timestamp = wp_next_scheduled('wps_price_update_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wps_price_update_event');
    }
}
register_deactivation_hook(__FILE__, 'wps_clear_price_update_cron');

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

  • Убедитесь, что в базе данных у товаров меняется мета _price и _sale_price в зависимости от времени суток.
  • Проверьте на фронте, что цена товара изменяется в соответствии с расписанием (например, обновите страницу в 21:00).
  • Включите WP_DEBUG и логируйте изменения, добавив в функцию error_log() с id товаров и новыми ценами.

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

  • Цены не меняются: Проверьте, что wp-cron работает (проверьте событие через плагин WP Crontrol).
  • Цены сбрасываются на 0: Убедитесь, что у товаров заполнен мета _regular_price.
  • Расписание не срабатывает вовремя: wp-cron запускается при посещении сайта, для точного расписания настройте системный cron на вызов wp-cron.php.

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

  • Если товаров много, используйте постраничный запрос с 'posts_per_page' => 50 и сохраняйте прогресс в transient, чтобы не нагружать сервер.
  • Не меняйте цены часто — достаточно один раз в час или в день.
  • Всегда проверяйте, что новые цены не больше регулярных, чтобы избежать ошибок в отображении.
  • Для безопасности используйте nonce и права доступа, если делаете интерфейс управления скидками.

Сравнение вариантов реализации

МетодПлюсыМинусы
Плагины (Clearfy, Dynamic Pricing)Простая настройка, готовый функционал, поддержкаСтоимость, ограниченная кастомизация, нагрузка
Кастомный код с wp-cronПолный контроль, бесплатное решение, гибкостьТребуется разработка, возможны ошибки, нагрузка при большом каталоге
Использование системного cron с WP-CLIТочный запуск, высокая производительностьСложность настройки, требует доступа к серверу
Lazy loading для картинок в WordPress: технические рекомендации и примеры
16.12.2025
WooCommerce: как автоматически отключить варианты товаров без остатка и без продаж
23.06.2026
Как использовать Advanced Custom Fields для создания сложных форм в WordPress
17.04.2026
WooCommerce: автоматическое изменение цен товаров по расписанию
03.07.2026
Как создать выбор по дате в админке WordPress с примерами кода
21.02.2026