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

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

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

WP-Cron позволяет запускать PHP-функции по расписанию, например, раз в час или ежедневно. Это обеспечивает автоматическое обновление каталога без вашего участия.

Как проверить, работает ли WP-Cron на вашем сайте

  • Проверьте, активирован ли WP-Cron по умолчанию. Для этого откройте файл wp-config.php и убедитесь, что нет строки define('DISABLE_WP_CRON', true);.
  • Установите плагин WP Crontrol — с его помощью можно просмотреть, какие задачи запланированы и когда они выполняются.
  • В разделе «Инструменты» → «Cron Events» плагина WP Crontrol можно видеть активные события и запускать их вручную для теста.

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

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

В файле functions.php вашей дочерней темы или в собственном плагине добавьте функцию, которая обновит нужные данные. В примере ниже обновим цены товаров, добавив 10% к базовой цене.

function wps_update_woocommerce_prices() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $products = get_posts($args);
    foreach ($products as $product_id) {
        $product = wc_get_product($product_id);
        if ($product) {
            $regular_price = (float) $product->get_regular_price();
            $new_price = $regular_price * 1.10; // Увеличиваем на 10%
            $product->set_price($new_price);
            $product->save();
        }
    }
}

2. Регистрируем событие WP-Cron

Теперь нужно зарегистрировать событие, которое будет запускать эту функцию, например, ежедневно.

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

add_action('wps_daily_update_hook', 'wps_update_woocommerce_prices');

3. Удаление задачи при деактивации

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

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

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

  • Запустите вручную задачу через плагин WP Crontrol — перейдите в «Cron Events», найдите wps_daily_update_hook и нажмите «Run Now».
  • Проверьте цены товаров в админке WooCommerce — должны увеличиться на 10%.
  • Подождите следующий запланированный запуск (например, сутки) и убедитесь, что обновление происходит автоматически.

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

  • WP-Cron не срабатывает регулярно: Если на сайте низкий трафик, WP-Cron может не запускаться. Решение — настроить системный cron на сервере, чтобы вызывать wp-cron.php каждые 15 минут. Например, команда для crontab:
    wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Функция обновления не изменяет цены: Проверьте, что функция wc_get_product() возвращает объект, а также что цены передаются в правильном формате (число). Логируйте ошибки с помощью error_log().
  • Дублирование задач WP-Cron: Убедитесь, что функция регистрации задач вызывается один раз, а не на каждом запросе без проверки wp_next_scheduled().

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

  • Не запускайте обновления каталога слишком часто, чтобы не нагружать базу данных.
  • Если у вас большой магазин, разбивайте обновление на партии по 50-100 товаров, чтобы избежать таймаутов.
  • Добавьте проверку nonce и прав доступа, если запускаете обновление через AJAX или запросы.
  • Для критичных изменений лучше делать резервную копию базы перед обновлением.

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

МетодПлюсыМинусыПример
WP-Cron Встроенный, не требует доступа к серверу, легко настраивается Зависит от посещаемости сайта, может не запускаться вовремя Код из статьи
Системный cron Точный запуск по расписанию, надежность Требует доступа к серверу, настройка сложнее crontab + wget wp-cron.php
Плагины обновления Удобный интерфейс, дополнительные функции Могут замедлять сайт, зависят от стороннего кода WP All Import, WP Crontrol
Как создать автоматический резервный копий WordPress с помощью WP-Cron
11.02.2026
Как создать свой шорткод в WordPress с примером кода
06.11.2025
Как добавить автоматическое обновление трансляции видео в WordPress
21.01.2026
Как отключить автоматическое обновление WooCommerce без переопределения файлов
09.05.2026
Как добавить автоматические уведомления о обновлениях плагинов в WordPress
22.02.2026