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

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

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

Как работает автоматическое изменение цен в WooCommerce

Идея решения — использовать WP-Cron для запуска функции изменения цен в заданное время. Функция выбирает нужные товары и обновляет их цены программно.

Основные этапы:

  1. Создание функции, которая изменяет цены товаров.
  2. Регистрация WP-Cron задачи на нужный интервал (например, ежедневно в полночь).
  3. Проверка и удаление задачи при деактивации темы или плагина.

Пошаговое решение с примером кода

1. Функция для обновления цен

В примере ниже мы увеличим цену всех товаров из категории «sale-items» на 20% в период акции.

function wpfind_update_sale_prices() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => [
            [
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => 'sale-items',
            ],
        ],
        'post_status' => 'publish',
    ];
    $products = get_posts($args);
    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        if (!$product) continue;

        $regular_price = $product->get_regular_price();
        if (!$regular_price) continue;

        // Увеличиваем цену на 20%
        $new_price = round($regular_price * 1.20, 2);
        $product->set_price($new_price);
        $product->set_sale_price(''); // Снимаем скидку, если была
        $product->save();
    }
}

2. Регистрация WP-Cron задачи

Добавляем задачу, которая запускается ежедневно в полночь.

function wpfind_schedule_price_update() {
    if (!wp_next_scheduled('wpfind_daily_price_update')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wpfind_daily_price_update');
    }
}
add_action('wp', 'wpfind_schedule_price_update');

add_action('wpfind_daily_price_update', 'wpfind_update_sale_prices');

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

Чтобы не создавать лишних задач, удалим cron при деактивации темы или плагина.

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

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

  • Проверьте наличие запланированной задачи: wp cron event list через WP-CLI или с помощью плагина WP Crontrol.
  • Проверьте цены товаров из категории «sale-items» до и после запуска cron (можно временно изменить расписание на ближайшую минуту для теста).
  • В журнале ошибок PHP убедитесь, что нет предупреждений или ошибок.

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

  • Функция не запускается: Убедитесь, что WP-Cron включён и сайт посещается регулярно, иначе задачи не срабатывают.
  • Цены не изменяются: Проверьте, что у товаров есть регулярные цены и что категория указана правильно.
  • Дублирование задач: Проверьте, что wp_next_scheduled корректно предотвращает повторное создание задачи.
  • Ошибка при сохранении продукта: Используйте wc_get_product для получения объекта и метод save() для сохранения изменений.

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

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

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

МетодПлюсыМинусы
WP-Cron с PHP кодомГибко, бесплатно, легко кастомизироватьЗависит от посещаемости сайта, нагрузка при большом каталоге
Плагины для распродаж (например, WooCommerce Scheduler)Удобный интерфейс, дополнительные функцииМожет быть платным, лишний код, возможны конфликты
WP-CLI скриптыБыстрее при больших объёмах, можно запускать вручнуюТребует SSH доступа и навыков работы с командной строкой
Как удалить старые версии постов в WordPress с помощью кода
23.01.2026
WooCommerce: автоматическое удаление заказов по статусу и срокам без плагинов
19.06.2026
Как создать простую систему рейтинга в WordPress
04.12.2025
WooCommerce: решение проблемы с непоявлением вариаций при использовании кэширования
20.04.2026
Автоматическое создание записей из внешних источников в WordPress
15.12.2025

Сайт в разработке, скоро здесь будет портал о WordPress.