WooCommerce: как автоматически изменять цены товаров после акции

Почему автоматическое изменение цен после акции важно

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

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

Если после окончания акции цены товаров не возвращаются к исходным, проверьте следующие моменты:

  • Правильно ли установлены даты начала и окончания акции в настройках товара?
  • Используются ли стандартные поля sale_price и sale_price_dates_to для акций?
  • Нет ли конфликтов с плагинами кэширования или оптимизации?
  • Обновляется ли цена товара динамически при запросах к базе?

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

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

function wc_reset_expired_sale_prices() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_sale_price_dates_to',
                'value' => current_time('timestamp'),
                'compare' => '<',
                'type' => 'NUMERIC'
            ]
        ]
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $product_id = get_the_ID();

            // Удаляем акционную цену и даты
            update_post_meta($product_id, '_sale_price', '');
            update_post_meta($product_id, '_sale_price_dates_from', '');
            update_post_meta($product_id, '_sale_price_dates_to', '');

            // Принудительно очищаем кэш цены
            wc_delete_product_transients($product_id);
        }
        wp_reset_postdata();
    }
}

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

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

add_action('wc_daily_sale_price_reset_event', 'wc_reset_expired_sale_prices');

3. Очистка Cron при деактивации

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

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

  • Проверьте, что у товаров с просроченной акцией поля _sale_price и даты очистились.
  • В админке WooCommerce цены должны отображаться без скидки.
  • Используйте плагин WP Crontrol для просмотра и запуска Cron-событий вручную.
  • Проверьте фронтенд магазина и убедитесь в корректном отображении цен.

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

  • Крон не срабатывает: убедитесь, что на сервере разрешены WP-Cron, или настройте системный Cron для wp-cron.php.
  • Цены не обновляются: проверьте, что у товаров правильно заполнены метаполя _sale_price_dates_to и _sale_price.
  • Кэш мешает обновлению: очистите кэш сайта и браузера, особенно если используете сторонние плагины кэширования.
  • Сброс цен приводит к потере данных: всегда делайте резервные копии базы перед массовыми изменениями.

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

  • Для магазинов с большим количеством товаров используйте пагинацию в запросах, чтобы избежать превышения лимита памяти:
$args = [
    'post_type' => 'product',
    'posts_per_page' => 100, // например
    'paged' => $page_number,
    'meta_query' => [
        [...]
    ]
];
  • Используйте транзиенты для кеширования результатов запросов в функции сброса.
  • Проверяйте права пользователя при ручном запуске Cron задач.
  • Регулярно обновляйте WooCommerce и WordPress для безопасности.

Сравнение вариантов реализации

СпособПлюсыМинусы
WP-Cron (PHP код)Гибкость, контроль, не требует сторонних плагиновЗависит от посещаемости сайта, возможны задержки
Сторонние плагины автоматизацииПростота настройки, готовые решенияНагрузка, возможность конфликтов, не всегда бесплатны
Системный Cron + WP-CLIМаксимальная надежность и скоростьТребует доступа к серверу и навыков работы с CLI
WooCommerce: как автоматически изменять цены товаров после акции
09.07.2026
WooCommerce: как автоматически изменять ставку налогов по регионам без плагинов
06.07.2026
Как создать динамические виджеты на PHP
18.11.2025
Как удалить неиспользуемые шорткоды в WordPress без плагинов
07.04.2026
Как установить ограничения на подробное отображение пользователей в WordPress
29.01.2026