Как автоматически изменять атрибуты товаров WooCommerce по расписанию

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

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

Подходы к автоматическому изменению атрибутов

Использование WP-Cron для запуска задач по расписанию

В WordPress есть встроенный планировщик задач WP-Cron, позволяющий запускать пользовательские функции через заданные интервалы. Мы воспользуемся этим механизмом для запуска функции, которая перебирает товары и меняет нужные атрибуты.

Пример задачи: изменить атрибут "Цвет" на "Зеленый" для всех товаров категории "Сезонные" каждый понедельник в 3:00 утра

Пошаговое решение

1. Добавляем кастомное событие WP-Cron

function wplog_add_weekly_cron_schedule( $schedules ) {
    if ( ! isset( $schedules['weekly_monday_3am'] ) ) {
        $schedules['weekly_monday_3am'] = array(
            'interval' => 604800, // 7 дней в секундах
            'display'  => 'Еженедельно по понедельникам в 3:00',
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules', 'wplog_add_weekly_cron_schedule' );

2. Регистрируем задачу при активации темы или плагина

function wplog_schedule_attribute_update() {
    if ( ! wp_next_scheduled( 'wplog_update_product_attributes_event' ) ) {
        // Запускаем сразу при следующем понедельнике 3:00
        $timestamp = strtotime('next Monday 3:00');
        wp_schedule_event( $timestamp, 'weekly_monday_3am', 'wplog_update_product_attributes_event' );
    }
}
add_action( 'wp', 'wplog_schedule_attribute_update' );

3. Реализуем функцию обновления атрибутов товаров

function wplog_update_product_attributes() {
    $args = array(
        'status' => 'publish',
        'limit' => -1,
        'category' => array('seasonal'), // Слаг категории
    );
    $products = wc_get_products( $args );
    
    foreach ( $products as $product ) {
        $attributes = $product->get_attributes();
        
        // Предположим, что атрибут "Цвет" имеет slug pa_color
        $color_attr_name = 'pa_color';
        if ( isset( $attributes[ $color_attr_name ] ) ) {
            $attr = $attributes[ $color_attr_name ];
            // Устанавливаем значение "Зеленый" (slug: green)
            $attr->set_options( array( 'green' ) );
            $product->set_attributes( $attributes );
            $product->save();
        }
    }
}
add_action( 'wplog_update_product_attributes_event', 'wplog_update_product_attributes' );

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

  • Убедитесь, что в административной панели WooCommerce в разделе «Товары» для категории "Сезонные" атрибут "Цвет" изменён на "Зеленый".
  • Для проверки запуска WP-Cron можно использовать плагин "WP Crontrol" — он покажет запланированные задачи и дату следующего запуска.
  • Для отладки можно временно заменить интервал на минутный и проверить моментальное обновление.

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

  • Задача не запускается
    Проверьте, что WP-Cron работает. Если на сайте низкий трафик, WP-Cron может не запускаться вовремя. Решение — настроить системный cron на сервере для вызова wp-cron.php.
  • Атрибуты не изменяются
    Убедитесь, что slug атрибута и терминов совпадают с теми, что используются в WooCommerce. Атрибуты должны быть зарегистрированы как глобальные (pa_). Проверьте правильность категории товаров.
  • Превышение лимитов памяти или таймаута
    Обработка большого количества товаров может занимать время. Включите поэтапную обработку или увеличьте лимиты в php.ini.

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

  • Обрабатывайте товары пакетами, чтобы не перегружать сервер. Например, получайте по 50 товаров за раз с помощью параметра 'limit' => 50, 'page' => $page.
  • Используйте wp_schedule_single_event для отложенного вызова задачи, если нужно более гибкое расписание.
  • Проверяйте права пользователя, если планируете запускать задачу из административной части.
  • Всегда делайте резервные копии базы перед массовыми обновлениями.

Сравнение способов обновления атрибутов WooCommerce

МетодПлюсыМинусы
WP-Cron + кастомный кодПолный контроль, без сторонних плагинов, гибкое расписаниеЗависит от трафика сайта, требует навыков программирования
Плагины автозапуска обновленийПростота настройки, визуальный интерфейсМогут нагружать сайт, ограниченная кастомизация
Внешние скрипты и cron на сервереНезависимость от WP-Cron, стабильный запускТребует доступа к серверу, сложнее настраивать
Как использовать WP-Cron для автоматизации задач в WordPress
22.04.2026
Как использовать WooCommerce Webhooks для автоматизации задач
25.04.2026
Как сделать уникальный список постов с заказанным порядком в WordPress
01.02.2026
Как автоматически изменять атрибуты товаров WooCommerce по расписанию
04.08.2026
Как создать адаптивный блок с картинкой и текстом в WordPress
27.12.2025