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

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

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

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

1. Планирование задачи и выбор подхода

Для автоматического изменения цен используем WP-Cron — встроенный планировщик задач WordPress. При помощи него по расписанию будет запускаться функция изменения цен.

2. Создание функции для изменения цен

Функция должна принимать параметры — например, ID товаров и новые цены, или логику вычисления скидки.

function wpb_update_product_prices() {
    // Список ID товаров для обновления
    $product_ids = array(123, 456, 789);
    // Процент скидки, например 10%
    $discount_percent = 10;

    foreach ($product_ids as $product_id) {
        $product = wc_get_product($product_id);
        if (!$product) {
            continue;
        }
        $regular_price = (float) $product->get_regular_price();
        if ($regular_price > 0) {
            // Рассчитываем новую цену
            $new_price = round($regular_price * (1 - $discount_percent / 100), 2);
            $product->set_sale_price($new_price);
            $product->save();
        }
    }
}

3. Регистрация задачи WP-Cron

Добавим хук, который будет запускать функцию по расписанию, например, ежедневно в 3 часа ночи.

add_action('wpb_daily_price_update_event', 'wpb_update_product_prices');

function wpb_schedule_price_update() {
    if (!wp_next_scheduled('wpb_daily_price_update_event')) {
        wp_schedule_event(strtotime('03:00:00'), 'daily', 'wpb_daily_price_update_event');
    }
}
add_action('wp', 'wpb_schedule_price_update');

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

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

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

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

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

  • Функция не запускается автоматически: WP-Cron запускается при посещении сайта, если трафика нет — задачи не выполняются. Решение — настроить системный cron на сервере, вызывающий wp-cron.php или использовать плагин для контроля cron.
  • Неверно указаны ID товаров: функция пропускает товары, если ID невалидны. Проверяйте ID через админку WooCommerce.
  • Цена не изменяется: возможно, у товара не задана regular_price или функция неправильно сохраняет продукт. Используйте $product->save() после установки цены.
  • Расписание не очищается: при смене темы или отключении кода событие остается в расписании — нужно удалять его через wp_unschedule_event().

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

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

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

ВариантПлюсыМинусыКомпромисс
WP-Cron + кастомный код Полный контроль, без плагинов, гибкость Зависимость от трафика, требует знаний PHP Настроить системный cron для надежности
Плагины автоматизации цен Простота, готовые интерфейсы Нагрузка, лишние зависимости, платные функции Использовать только проверенные плагины
Внешние сервисы и интеграции Масштабируемость, автоматизация Зависимость от API, сложность интеграции Тщательно тестировать и мониторить
Как добавить поле с вариантами в вывод товара WooCommerce для удобства выбора
15.09.2026
Как закрыть страницы автора от индексации в WordPress без лишних дублей
22.08.2026
WooCommerce: как реализовать автосохранение изменений в корзине без перезагрузки страницы
03.10.2026
Как отключить oEmbed в WordPress и убрать лишние запросы в head
28.09.2026
WooCommerce: как автоматически удалять неактивные варианты товаров по расписанию без плагинов
29.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »