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

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

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

Как настроить автоматическое изменение цен в WooCommerce: пошаговое решение

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

В первую очередь нужно написать функцию, которая будет менять цену товара по ID. Используем стандартные методы WooCommerce:

function update_product_price_by_id($product_id, $new_price) {
    $product = wc_get_product($product_id);
    if (!$product) return false;

    $product->set_regular_price($new_price);
    // Если есть скидка, можно обновить sale price тоже
    $product->save();
    return true;
}

2. Определяем расписание с помощью WP-Cron

Для регулярного запуска задачи используем WP-Cron. Например, меняем цены ежедневно в 3 часа ночи.

if (!wp_next_scheduled('custom_update_product_prices')) {
    wp_schedule_event(strtotime('03:00:00'), 'daily', 'custom_update_product_prices');
}

add_action('custom_update_product_prices', 'custom_update_prices_callback');

function custom_update_prices_callback() {
    // Список товаров и новые цены или логика вычисления
    $products_to_update = [
        123 => 1499, // product_id => new_price
        456 => 999,
    ];

    foreach ($products_to_update as $product_id => $price) {
        update_product_price_by_id($product_id, $price);
    }
}

3. Динамическое управление ценами и интеграция с метаполями

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

function custom_update_prices_callback() {
    $args = [
        'limit' => -1,
        'status' => 'publish',
    ];

    $products = wc_get_products($args);
    foreach ($products as $product) {
        $promo_price = get_post_meta($product->get_id(), '_promo_price', true);
        $promo_end = get_post_meta($product->get_id(), '_promo_end_date', true);

        if ($promo_price && $promo_end && strtotime($promo_end) > time()) {
            $product->set_sale_price($promo_price);
        } else {
            $product->set_sale_price('');
        }
        $product->save();
    }
}

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

  • Зайдите в админку WooCommerce > Товары и проверьте цены выбранных товаров.
  • Для проверки выполнения WP-Cron можно использовать плагин WP Crontrol (https://ru.wordpress.org/plugins/wp-crontrol/) — проверить, что задание custom_update_product_prices запланировано и успешно выполняется.
  • Сравните цены товаров на сайте до и после срабатывания крона (после 3 часов ночи или вызовите вручную).

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

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

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

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

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

МетодПлюсыМинусыПример
WP-Cron + PHP-кодГибко, не требует плагинов, легко кастомизируетсяЗависит от посещаемости сайта, требует навыков программированияПример из статьи
Плагины акций и скидокПростой интерфейс, часто с расширенными возможностямиМожет замедлять сайт, ограничены настройками, дополнительные расходыAdvanced Coupons, WooCommerce Dynamic Pricing
Ручное изменение через админкуПросто, без кодаНе подходит для массовых изменений и расписанийАдминка WooCommerce
WooCommerce: установка и настройка автоматического возврата денег по заказам
07.05.2026
Как создать динамическую форму в WordPress с помощью AJAX
14.03.2026
Как изменить URL текущей страницы в WordPress без перенаправления
27.02.2026
Как создать автоматический отчет о проблемах WordPress
28.01.2026
Как удалить пустые записи в WordPress из базы данных
31.01.2026