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

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

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

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

Основные подходы

Есть два основных способа автоматизировать изменение цен по расписанию:

  • Использовать WP-Cron и кастомный PHP-код для периодической проверки и обновления цен;
  • Интегрировать сторонний планировщик задач на сервере (например, системный cron) для запуска скрипта вне зависимости от посещаемости сайта.

В данной статье рассмотрим вариант с WP-Cron — он проще для большинства хостингов и не требует доступа к серверу.

Создание функции обновления цены

Для начала напишем функцию, которая будет менять цену у конкретного товара по ID:

function wpmart_update_product_price( $product_id, $new_price ) {
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return false;
    }
    $product->set_regular_price( $new_price );
    // Чтобы цена отображалась сразу, можно сбросить цену продаж
    $product->set_sale_price('');
    $product->save();
    return true;
}

Эта функция безопасно обновляет регулярную цену товара и сохраняет изменения.

Добавление задачи в WP-Cron

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

add_action( 'wpmart_daily_price_update', 'wpmart_run_price_updates' );

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

function wpmart_run_price_updates() {
    // Пример: меняем цену товара с ID 123 на 799 рублей с 1 июня 2024
    $current_date = current_time( 'Y-m-d' );
    if ( $current_date >= '2024-06-01' ) {
        wpmart_update_product_price( 123, 799 );
    }
    // Здесь можно добавить другие условия и товары
}

Этот код устанавливает ежедневное событие, которое проверяет дату и меняет цену при наступлении условия.

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

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

  • В админке WooCommerce откройте страницу товара и проверьте цену;
  • Для теста можно временно изменить дату в коде на текущую;
  • Также можно вручную запустить действие через WP-CLI: wp cron event run wpmart_daily_price_update;
  • Обратите внимание на логи ошибок PHP и WooCommerce (если включены) — отсутствие ошибок говорит о корректной работе.

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

  • Неправильный ID товара: Функция wc_get_product возвращает null — проверьте ID;
  • WP-Cron не запускается из-за низкой посещаемости: На слабых сайтах можно настроить системный cron или использовать плагин WP Crontrol для запуска вручную;
  • Кэширование мешает видеть изменения: Очистите кеш сайта и браузера после обновления;
  • Цена не обновляется в корзине: Проверьте, что после изменения цены вызывается $product->save(); и кеш WooCommerce сбрасывается.

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

  • Избегайте частого запуска WP-Cron, чтобы не нагружать сервер;
  • Используйте системный cron для более надежного запуска задач на больших сайтах;
  • Проверяйте права пользователя, если планируете добавлять интерфейс для управления ценами;
  • Храните расписание и параметры обновления в опциях или отдельной таблице для удобства управления;
  • Для массовых обновлений цен используйте WP_Query с wc_get_products по мета-данным, чтобы минимизировать количество запросов.

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

МетодПлюсыМинусы
WP-CronЛегко настроить, не требует доступа к серверуЗависит от посещаемости сайта, возможны задержки
Системный cronНадежный запуск в нужное время, не зависит от трафикаТребует доступа к серверу и навыков администрирования
Плагины (например, WP All Import с расписанием)Готовые решения, удобный интерфейсМогут быть платными, лишний функционал
WooCommerce: установка минимальной суммы заказа по регионам с проверкой
17.04.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
17.01.2026
WooCommerce: как автоматически удалять старые заказы по расписанию без плагинов
16.06.2026
Как отключить автосохранение в WordPress
14.01.2026
Как создать собственный тип постов в WordPress с поддержкой REST API
14.04.2026