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

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

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

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

1. Использование WP-Cron для запуска задачи по расписанию

WordPress предоставляет встроенный планировщик задач WP-Cron, который позволяет запускать функции по расписанию. Для автоматического изменения цен создадим собственную задачу, которая будет срабатывать, например, ежедневно в определённое время.

if ( ! wp_next_scheduled( 'wpassist_change_product_prices_daily' ) ) {
    wp_schedule_event( strtotime('02:00:00'), 'daily', 'wpassist_change_product_prices_daily' );
}

Здесь мы планируем событие, которое сработает каждый день в 2 часа ночи.

2. Функция для изменения цен товаров

Внутри обработчика события нужно пройтись по нужным товарам и изменить их цены. Ниже пример изменения цены всех товаров с категорией "Распродажа" — уменьшение цены на 10%.

add_action( 'wpassist_change_product_prices_daily', 'wpassist_update_sale_prices' );

function wpassist_update_sale_prices() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'tax_query'      => [
            [
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => 'rasprodazha',
            ],
        ],
    ];

    $products = get_posts( $args );

    foreach ( $products as $product_post ) {
        $product = wc_get_product( $product_post->ID );
        if ( ! $product ) {
            continue;
        }

        $regular_price = (float) $product->get_regular_price();
        if ( $regular_price <= 0 ) {
            continue;
        }

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

3. Очистка cron задачи при деактивации темы или плагина

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

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

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

  • В админке WordPress установите плагин WP Crontrol (https://wordpress.org/plugins/wp-crontrol/) для просмотра и управления запланированными задачами.
  • Проверьте, что задача wpassist_change_product_prices_daily запланирована и активна.
  • Вручную запустите задачу через WP Crontrol для проверки изменения цен без ожидания.
  • Откройте карточки товаров из категории "Распродажа" и убедитесь, что цена продажи изменилась на 10% меньше регулярной.

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

  • Задача не срабатывает: проверьте работу WP-Cron, иногда на серверах с низкой активностью посетителей cron не запускается. Для надежности настройте системный cron через хостинг.
  • Цены не меняются: убедитесь, что категория товаров указана правильно и товары действительно имеют регулярную цену.
  • Проблемы с сохранением товара: убедитесь в правильном использовании методов set_sale_price() и save() у объекта WC_Product.

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

  • При большом количестве товаров разбивайте обновление на партии, чтобы избежать превышения времени выполнения скрипта.
  • Используйте транзиенты или кэширование для хранения результатов и минимизации запросов к базе.
  • Ограничьте права доступа к коду, который меняет цены, чтобы исключить несанкционированные изменения.

Сравнение способов изменения цен в WooCommerce

МетодПлюсыМинусыПример
Плагин автоматизации ценПростота настройки, готовые функцииЗависимость от стороннего кода, возможные конфликтыDynamic Pricing for WooCommerce
WP-Cron с кастомным кодомПолный контроль, без лишних плагиновТребуется программирование и тестированиеКод из статьи
Ручное обновление через админкуПростота и универсальностьТрудозатратно на больших магазинахРедактирование товаров вручную
Как создать автоматическое резервное копирование в WordPress без плагинов
17.03.2026
Как удалить пустые термины в таксономиях WordPress
06.04.2026
Как использовать WordPress hooks для автоматизации задач
12.11.2025
Как добавить автоподпись в WordPress с помощью PHP
26.11.2025
Как избежать конфликтов между WooCommerce и другими плагинами WordPress
20.04.2026