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

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

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

Как определить, что задача актуальна?

  • Есть товары с временными скидками или акциями.
  • Товары появляются и исчезают из наличия по расписанию.
  • Необходимо обновлять цены и статусы без участия администратора.

Пошаговое решение с использованием WP-Cron и хуков WooCommerce

Шаг 1. Создайте функцию для обновления цены и наличия

Напишем функцию, которая будет изменять цену и статус наличия для заданного товара.

function wpdev_update_product_price_and_stock( $product_id, $new_price, $stock_status ) {
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return false;
    }
    // Обновляем цену
    $product->set_price( $new_price );
    $product->set_regular_price( $new_price );
    $product->save();
    // Обновляем статус наличия
    update_post_meta( $product_id, '_stock_status', $stock_status );
    wc_update_product_stock_status( $product_id, $stock_status );
    wc_delete_product_transients( $product_id );
    return true;
}

Шаг 2. Создайте функцию для задания расписания

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

function wpdev_schedule_price_stock_update() {
    if ( ! wp_next_scheduled( 'wpdev_cron_update_products' ) ) {
        // Запускаем задачу каждый день в 03:00
        wp_schedule_event( strtotime('03:00:00'), 'daily', 'wpdev_cron_update_products' );
    }
}
add_action( 'wp', 'wpdev_schedule_price_stock_update' );

Шаг 3. Обработчик крон-задачи с логикой обновления

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

add_action( 'wpdev_cron_update_products', 'wpdev_cron_update_products_callback' );
function wpdev_cron_update_products_callback() {
    $products_to_update = [
        ['id' => 123, 'price' => 499, 'stock' => 'instock'],
        ['id' => 124, 'price' => 0, 'stock' => 'outofstock'],
    ];
    foreach ( $products_to_update as $item ) {
        wpdev_update_product_price_and_stock( $item['id'], $item['price'], $item['stock'] );
    }
}

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

  • Подождите или вручную запустите крон-задачу через WP-CLI: wp cron event run wpdev_cron_update_products.
  • Проверьте на фронтенде и в админке WooCommerce, что цена и статус наличия изменились у нужных товаров.
  • Проверьте логи ошибок сервера для исключения сбоев.

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

  • Крон не запускается: убедитесь, что WP-Cron включён, или настройте системный cron на сервере.
  • Цена не меняется: проверьте, правильно ли указан ID товара, и вызывается ли $product->save().
  • Наличие не обновляется: используйте wc_update_product_stock_status() и обновляйте метаполе _stock_status.
  • Кэш не обновляется: вызовите wc_delete_product_transients() для очистки кеша товара.

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

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

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

ВариантПлюсыМинусы
Код на WP-Cron + хуки WooCommerceГибкость, нет зависимости от плагинов, полный контрольТребует навыков программиста, возможны ошибки в расписании
Плагины акций и расписания (например, WooCommerce Scheduler)Простота настройки, готовый интерфейсМогут конфликтовать с другими плагинами, нагрузка на сайт
Ручное обновление через админкуПростота, не требует программированияМного ручной работы, ошибки, не автоматизировано
Как избежать конфликтов между WooCommerce и плагинами кеширования
21.05.2026
Как создать динамический виджет WordPress с поддержкой AJAX
27.12.2025
WooCommerce: установка и настройка подключения платежного шлюза Сбербанк
25.05.2026
Как создать динамический файл robots.txt в WordPress
08.03.2026
Автоматическое удаление старых записей в WordPress через шорткод
11.04.2026