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

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

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

Как работает автообновление цен в WooCommerce

Основная идея — использовать WP-Cron для запуска функции, которая изменит цену нужных товаров по заданному расписанию. При этом изменения можно делать как для всех товаров, так и для выбранных категорий или товаров по ID.

Что именно изменяется

  • Регулярная цена (regular_price)
  • Цена по акции (sale_price)
  • Дата начала и окончания акции (sale_price_dates_from, sale_price_dates_to)

Пошаговое решение: пример кода автоматического снижения цен на 20% с 1 по 7 число каждого месяца

1. Регистрируем WP-Cron событие, если оно ещё не создано:

function wpfind_register_price_update_cron() {
    if ( ! wp_next_scheduled( 'wpfind_update_prices_event' ) ) {
        wp_schedule_event( strtotime('first day of this month 00:05'), 'monthly', 'wpfind_update_prices_event' );
    }
}
add_action( 'wp', 'wpfind_register_price_update_cron' );

2. Создаём функцию, которая будет обновлять цены:

function wpfind_update_prices() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'post_status'    => 'publish',
    );
    $products = get_posts( $args );
    foreach ( $products as $product_post ) {
        $product = wc_get_product( $product_post->ID );
        if ( ! $product ) continue;

        $regular_price = $product->get_regular_price();
        if ( ! $regular_price ) continue;

        $new_sale_price = $regular_price * 0.8; // скидка 20%

        $product->set_sale_price( $new_sale_price );
        $product->set_date_on_sale_from( current_time( 'timestamp' ) );
        // Устанавливаем окончание акции на 7 число текущего месяца 23:59
        $sale_to = strtotime('7 day of this month 23:59');
        $product->set_date_on_sale_to( $sale_to );
        $product->save();
    }
}
add_action( 'wpfind_update_prices_event', 'wpfind_update_prices' );

3. Добавляем функцию для удаления акции после 7 числа (по аналогии с обновлением), чтобы цены возвращались к обычным:

function wpfind_remove_sales_after_7th() {
    $today = date('j');
    if ( $today <= 7 ) return; // Выполняем только после 7 числа

    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'     => '_sale_price',
                'compare' => 'EXISTS',
            ),
        ),
    );
    $products = get_posts( $args );
    foreach ( $products as $product_post ) {
        $product = wc_get_product( $product_post->ID );
        if ( ! $product ) continue;

        $product->set_sale_price( '' );
        $product->set_date_on_sale_from( '' );
        $product->set_date_on_sale_to( '' );
        $product->save();
    }
}
add_action( 'wp', 'wpfind_remove_sales_after_7th' );

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

  • Убедитесь, что в таблице wp_options создалась запись с cron задачей wpfind_update_prices_event (например, с помощью плагина WP Crontrol).
  • Вручную вызовите функцию wpfind_update_prices() через консоль WP-CLI или временный вызов в шаблоне, чтобы проверить обновление цен.
  • Проверьте карточки товаров на фронтенде — должны появиться цены по акции и даты акции.
  • После 7-го числа убедитесь, что акции снялись автоматически.

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

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

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

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

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

МетодПреимуществаНедостатки
Код через WP-CronГибкость, точный контроль, без сторонних плагиновТребует навыков, возможны проблемы с WP-Cron на слабых хостингах
Плагины для скидок и акцийПростота настройки, визуальные интерфейсы, дополнительные функцииМогут нагружать сайт, не всегда гибкие
Ручное изменение ценПростотаОшибки, трудоёмко, не автоматизировано
Как использовать WPRemark для автоматического комментирования в WordPress
28.01.2026
Автоматическое изменение цен в WooCommerce по расписанию
09.06.2026
WooCommerce: автоматическое удаление заказов по статусу и срокам
25.05.2026
Как создать динамические фильтры в WordPress с помощью REST API
13.04.2026
Как удалить или отключить Emoji в WordPress для ускорения сайта
27.03.2026

Сайт в разработке, скоро здесь будет портал о WordPress.