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

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

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

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

WooCommerce хранит цены товаров в метаданных поста (по ключам _regular_price, _sale_price, _price). Наличие — в поле stock_status. Для изменения этих значений программно используется функция update_post_meta() и методы класса WC_Product.

Пошаговое решение: настройка автоматического изменения цены и наличия по расписанию

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_regular_price($new_price);
    $product->set_price($new_price);

    // Обновляем наличие
    if (in_array($stock_status, ['instock', 'outofstock', 'onbackorder'])) {
        $product->set_stock_status($stock_status);
    }

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

2. Добавляем WP-Cron задачу для выполнения по расписанию

Чтобы запускать изменения автоматически, используем WP-Cron и хук с пользовательской функцией.

add_action('wpdev_scheduled_product_update', 'wpdev_scheduled_update_callback');

function wpdev_scheduled_update_callback() {
    // Пример: меняем товар с ID 123 на цену 999 и статус 'instock'
    wpdev_update_product_price_and_stock(123, 999, 'instock');

    // Тут можно добавить другие товары и логику
}

3. Регистрируем расписание (если нужно новое интервал)

add_filter('cron_schedules', 'wpdev_custom_cron_intervals');
function wpdev_custom_cron_intervals($schedules) {
    // Добавляем интервал в 10 минут
    $schedules['every_ten_minutes'] = [
        'interval' => 600,
        'display' => 'Каждые 10 минут'
    ];
    return $schedules;
}

4. Планируем событие при активации темы или плагина

if (!wp_next_scheduled('wpdev_scheduled_product_update')) {
    wp_schedule_event(time(), 'every_ten_minutes', 'wpdev_scheduled_product_update');
}

5. Удаляем событие при деактивации

function wpdev_deactivation() {
    $timestamp = wp_next_scheduled('wpdev_scheduled_product_update');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpdev_scheduled_product_update');
    }
}

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

  • В админке WooCommerce проверьте цену и статус товара с нужным ID.
  • Посмотрите журнал WP-Cron через плагин WP Crontrol или аналогичный, чтобы убедиться, что задача срабатывает.
  • Добавьте в функцию wpdev_scheduled_update_callback логирование (например, через error_log()) для отладки.

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

  • WP-Cron не запускается на хостинге: проверьте, что на сайте посещения есть, или настройте системный cron для вызова wp-cron.php.
  • Ошибка при получении продукта: убедитесь, что передаете корректный ID товара.
  • Цена не меняется: метод set_price() должен быть вызван после set_regular_price().
  • Кеширование мешает обновлению: очистите кеш объектов WooCommerce, если пользуетесь кеширующими плагинами.

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

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

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

МетодПлюсыМинусыПример
WP-Cron + кастомный кодГибкость, полное управление логикойЗависит от посещаемости, требует отладкиПример в статье
Плагины для расписания цен (например, "Schedule Stock & Price Manager")Простота настройки, готовый интерфейсМогут быть платными, ограничены в кастомизацииClearfy Pro помогает с оптимизацией и безопасностью, но не заменяет логику изменений
Внешние сервисы (API для управления товарами)Автоматизация вне сайта, масштабируемостьСложность интеграции, задержкиТребует разработки интеграции
WooCommerce: как автоматически удалять товары при пустой корзине
29.05.2026
Удаление CSS и JS из отдельных страниц WordPress для ускорения загрузки
10.02.2026
Как удалить или изменить slug кастомного типа записи в WordPress без потери данных
03.03.2026
Как удалить метаданные из изображений в WordPress без плагинов
09.12.2025
Как создать автоматическое обновление пакета в WordPress плагинах
07.02.2026