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

Проблема: необходимость регулярного обновления цен в WooCommerce

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

Диагностика проблемы: почему цены не обновляются автоматически

Если у вас настроены скрипты для обновления цен, но они не работают, проверьте:

  • Включен ли WP-Cron на сайте (проверка работы по расписанию).
  • Правильно ли задана логика обновления цен (функция меняет значения в мета-полях '_price', '_regular_price' и '_sale_price').
  • Отсутствуют ли ошибки PHP при выполнении скрипта.
  • Не перезаписывают ли другие плагины/темы цены обратно.

Пошаговое решение: автоматическое обновление цены товара с помощью Cron и кастомной функции

1. Создаем функцию обновления цены товара

Ниже пример функции, которая увеличивает цену товара с ID 123 на 10%:

function wpmart_update_product_price() {
    $product_id = 123; // ID товара
    $product = wc_get_product($product_id);
    if (!$product) {
        error_log('Product not found: '.$product_id);
        return;
    }

    $regular_price = floatval($product->get_regular_price());
    $new_price = $regular_price * 1.10; // +10%

    $product->set_regular_price($new_price);
    $product->set_price($new_price);
    $product->save();

    error_log('Price updated for product ' . $product_id . ' to ' . $new_price);
}

2. Регистрируем WP-Cron событие для запуска функции по расписанию

Добавляем планировщик, который будет запускать функцию ежедневно:

function wpmart_register_cron_event() {
    if (!wp_next_scheduled('wpmart_daily_price_update')) {
        wp_schedule_event(time(), 'daily', 'wpmart_daily_price_update');
    }
}
add_action('wp', 'wpmart_register_cron_event');

add_action('wpmart_daily_price_update', 'wpmart_update_product_price');

3. Очистка задачи при деактивации (чтобы не оставлять мусор)

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

Проверка результата

Чтобы удостовериться, что задача работает:

  • Просмотрите лог ошибок PHP или включите error_log и проверяйте появление сообщений «Price updated for product».
  • Зайдите в админку WooCommerce и проверьте цену товара вручную.
  • Используйте плагин WP Crontrol для просмотра и запуска Cron задач вручную.

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

  • WP-Cron не срабатывает — проверьте, что на сайте есть трафик или настройте системный cron на сервере, чтобы запускать wp-cron.php регулярно.
  • Цена не меняется — убедитесь, что функции set_regular_price и set_price вызываются и вызывается $product->save(). Проверьте разрешения пользователя и наличие плагинов, которые могут переопределять цены.
  • Ошибка с ID товара — проверьте, что товар существует и ID указан верно.

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

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

Пример расширения: обновление цен нескольких товаров

function wpmart_bulk_update_prices() {
    $product_ids = [123, 456, 789];
    foreach ($product_ids as $id) {
        $product = wc_get_product($id);
        if (!$product) continue;

        $price = floatval($product->get_regular_price());
        $new_price = $price * 0.95; // скидка 5%

        $product->set_regular_price($new_price);
        $product->set_price($new_price);
        $product->save();
    }
}

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

МетодПлюсыМинусыПодходит для
WP-Cron + кастомный кодГибкость, нет зависимостей от плагиновЗависит от посещаемости сайта, требует навыковРазработчики, индивидуальные задачи
Плагины автоматического обновления цен (например, WP All Import)Простота настройки, поддержка импорта CSV, APIПлатные, могут быть избыточныМагазины с большим каталогом
Внешние сервисы и интеграцииАвтоматическая синхронизация с поставщикамиСложность настройки, стоимостьСложные бизнесы, дропшиппинг
WooCommerce: как установить разные минимальные суммы заказа по регионам с проверкой
03.06.2026
Как создать динамический виджет в WordPress с использованием REST API
28.02.2026
Оптимизация базы данных WordPress: ударное решение для ускорения сайта
04.01.2026
Как использовать хуки для оптимизации WordPress
09.12.2025
Как установить ограничение на количество регистраций в WordPress
27.03.2026