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

Диагностика проблемы: зачем нужно автоматическое обновление остатков и цен

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

Типичные симптомы, что автоматизация необходима:

  • Цены и остатки устаревают к середине дня
  • Постоянные ошибки при импорте CSV вручную
  • Отсутствие гибкости для изменения цен по сложным условиям

В этом материале разберём, как настроить автоматическое обновление остатков и изменение цен с помощью стандартных средств WordPress и WooCommerce.

Как автоматизировать обновление остатков WooCommerce через WP-Cron

Настройка WP-Cron задачи для обновления остатков

WooCommerce хранит остатки товаров в мета-данных _stock. Чтобы обновлять их автоматически по расписанию, создадим кастомную WP-Cron задачу.

function custom_update_stock() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
    );
    $products = get_posts($args);
    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        // Пример логики: устанавливаем остаток согласно внешним данным
        $new_stock = fetch_stock_from_external_api($product->get_sku());
        if ($new_stock !== false) {
            $product->set_stock_quantity($new_stock);
            $product->save();
        }
    }
}

function schedule_custom_stock_update() {
    if (!wp_next_scheduled('custom_stock_update_hook')) {
        wp_schedule_event(time(), 'hourly', 'custom_stock_update_hook');
    }
}
add_action('wp', 'schedule_custom_stock_update');
add_action('custom_stock_update_hook', 'custom_update_stock');

В этом примере функция fetch_stock_from_external_api() — заглушка, которую нужно реализовать для получения актуальных остатков из вашего источника (API поставщика, CRM и т.д.).

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

Изменение цен через WP-Cron и хуки WooCommerce

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

function custom_update_prices() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
    );
    $products = get_posts($args);
    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        $regular_price = (float) $product->get_regular_price();

        // Пример: повышение цены на 5%
        $new_price = $regular_price * 1.05;
        $product->set_regular_price($new_price);
        $product->save();
    }
}

function schedule_custom_price_update() {
    if (!wp_next_scheduled('custom_price_update_hook')) {
        wp_schedule_event(time(), 'daily', 'custom_price_update_hook');
    }
}
add_action('wp', 'schedule_custom_price_update');
add_action('custom_price_update_hook', 'custom_update_prices');

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

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

  • Проверьте, что задачи WP-Cron запланированы: wp cron event list через WP-CLI или плагин WP Crontrol
  • Вручную вызовите задачи для теста:
    do_action('custom_stock_update_hook'); и do_action('custom_price_update_hook'); через functions.php или WP-CLI
  • Убедитесь, что в админке WooCommerce изменились запасы и цены
  • Проверьте логи ошибок PHP, если изменения не применились

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

  • WP-Cron не запускается автоматически: на хостинге нет реального cron или низкий трафик сайта — настройте системный cron на вызов wp-cron.php
  • Неверный формат цены или запаса: используйте числовые типы и функции WooCommerce для установки значений (set_regular_price, set_stock_quantity)
  • Функция получения данных из API возвращает false: проверьте правильность URL, авторизации, формат ответа
  • Изменения не видны в кэше: очистите кеш сайта и браузера

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

  • Не обновляйте все товары в одной задаче, если товаров >1000, разбивайте на порции с WP_Query и параметрами offset
  • Добавляйте логирование ошибок и успешных операций через error_log или сторонние сервисы
  • Ограничьте права доступа к функциям, если вызываете их через REST API или AJAX
  • Для высоконагруженных магазинов рассмотрите внешние CRON-задачи, вызывающие кастомные эндпоинты для обновления

Сравнение методов обновления остатков и цен

МетодПлюсыМинусыПример
WP-Cron + PHP кодГибкость, настройка внутри WordPressЗависит от трафика, требует программированияКод из статьи
Импорт CSV через WooCommerceПростота для небольших магазиновРучной процесс, риск ошибокАдминка WooCommerce - Импорт товаров
Внешний Cron + REST APIНадежность, можно запускать по расписаниюТребует разработки REST API и внешнего сервераКастомные REST эндпоинты

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое изменение цен товаров с помощью хуков
31.05.2026
WooCommerce: автоматическое изменение ставки налогов для разных регионов
12.06.2026
Автоматическое отключение пингов в WordPress для улучшения SEO
26.01.2026
Автоматическое управление переадресациями в WordPress по условиям с примерами кода
05.04.2026
Автоматическое управление изображениями в WordPress: оптимизация и сжатие
29.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее