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

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

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

Типичные симптомы, что нужна автоматизация:

  • Частое изменение цен по расписанию (например, каждую неделю или каждый день).
  • Необходимость быстро реагировать на маркетинговые акции.
  • Ошибки при ручном обновлении цен.

Выбор подхода: плагин vs код

Существует три основных варианта решения:

СпособПлюсыМинусыПример
Плагины автоматизации ценПростая настройка, интерфейс, меньше кодаПотенциально лишний вес, зависимости, не всегда точное расписаниеWooCommerce Dynamic Pricing, Scheduled Sale
Собственный код + WP-CronГибкость, точная логика, без лишних плагиновТребует навыков, тестирования, поддержкиПример в статье ниже
Внешние скрипты и APIМожно интегрировать с ERP, CRM, гибкоСложность, требует инфраструктурыИнтеграция через REST API WooCommerce

Пошаговое решение: автоматическое изменение цены через WP-Cron

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

Функция принимает ID товара и новую цену, обновляет мета-данные.

function wpassist_update_product_price( $product_id, $new_price ) {
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return false;
    }
    $product->set_regular_price( $new_price );
    $product->save();
    return true;
}

2. Создаём задачу, которая будет запускаться по расписанию

Добавим задачу в WP-Cron, которая будет менять цену в нужное время.

add_action( 'wpassist_scheduled_price_update', 'wpassist_handle_scheduled_price_update' );

function wpassist_handle_scheduled_price_update() {
    // Пример: меняем цену товара с ID 123 на 499 рублей
    $product_id = 123;
    $new_price = 499;
    wpassist_update_product_price( $product_id, $new_price );
}

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

Добавляем расписание — например, ежедневно в 00:00.

function wpassist_schedule_price_update() {
    if ( ! wp_next_scheduled( 'wpassist_scheduled_price_update' ) ) {
        wp_schedule_event( strtotime('00:00:00'), 'daily', 'wpassist_scheduled_price_update' );
    }
}
add_action( 'wp', 'wpassist_schedule_price_update' );

4. Отмена расписания при деактивации

function wpassist_clear_scheduled_price_update() {
    $timestamp = wp_next_scheduled( 'wpassist_scheduled_price_update' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpassist_scheduled_price_update' );
    }
}

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

  1. Проверьте, что событие запланировано: в консоли WP можно воспользоваться плагином WP Crontrol или выполнить в консоли базы данных запрос на wp_cron.
  2. Вручную вызовите функцию wpassist_handle_scheduled_price_update() через админский интерфейс, чтобы проверить обновление цены.
  3. Перейдите на страницу товара, убедитесь, что цена изменилась.
  4. Проверьте логи ошибок PHP на наличие проблем при запуске WP-Cron.

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

  • Событие WP-Cron не запускается: Проверьте, что на сервере включён WP-Cron (в файле wp-config.php не должна быть отключена константа DISABLE_WP_CRON). Если сайт мало посещают, WP-Cron может не запускаться — настройте системный cron на сервере.
  • Цена не обновляется: Убедитесь, что ID товара правильный и товар опубликован. Проверьте, что используете правильные методы WooCommerce (wc_get_product и методы объекта).
  • Блокировка кэша: Если используется кэширование, очистите кэш после обновления цены, чтобы изменения отобразились сразу.

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

  • Не делайте массовые обновления цен в одном событии — разбивайте на небольшие группы, чтобы избежать таймаутов и нагрузок.
  • Используйте nonce и проверяйте права пользователя, если добавляете интерфейс для ручного запуска обновлений.
  • Логируйте изменения цен и ошибки для отладки.
  • При необходимости интегрируйте Clearfy Pro для оптимизации базы данных и удаления лишних транзиентов после обновления цен.
Как удалить пустые термины в таксономиях WordPress
06.04.2026
Как настроить загрузку изображений Lazy Load в WordPress без плагинов
04.03.2026
Как сделать автоматический отчет о проблемах WordPress
07.03.2026
Как изменить вывод количества товаров в корзине WooCommerce
23.11.2025
Автоматическое удаление неактивных заказов в WooCommerce по времени
30.04.2026