WooCommerce: автоматическое изменение названий и описаний товаров по расписанию

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

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

Основной вопрос: как настроить автоматическое обновление названий и описаний товаров WooCommerce по расписанию без сторонних плагинов?

Подготовка и проверка среды

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

Убедитесь, что включена поддержка Cron WordPress (wp-cron.php) и что сервер обрабатывает планировщик заданий.

Пошаговое решение: создание функции автоматического обновления

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

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

function wpmart_update_product_title_and_description($product_id, $new_title, $new_description) {
    $product = wc_get_product($product_id);
    if (!$product) {
        return false; // товар не найден
    }

    // Обновляем название
    $product->set_name($new_title);

    // Обновляем описание (описание основное)
    $product->set_description($new_description);

    // Сохраняем изменения
    $product->save();

    return true;
}

2. Создаем задачу cron для запуска по расписанию

Добавим собственное событие cron и зарегистрируем обработчик.

add_action('wpmart_update_products_cron_hook', 'wpmart_scheduled_product_updates');

function wpmart_scheduled_product_updates() {
    // Пример: обновляем товар с ID 123
    $product_id = 123;
    $new_title = 'Акционное название на сегодня ' . date('d.m.Y');
    $new_description = 'Обновленное описание для акции по состоянию на ' . date('d.m.Y');

    wpmart_update_product_title_and_description($product_id, $new_title, $new_description);
}

// Регистрация события при отсутствии
if (!wp_next_scheduled('wpmart_update_products_cron_hook')) {
    wp_schedule_event(time(), 'daily', 'wpmart_update_products_cron_hook');
}

3. Добавляем кастомные интервалы расписания (если нужно чаще чем ежедневно)

Например, для запуска раз в 6 часов добавим интервал:

add_filter('cron_schedules', 'wpmart_custom_cron_schedules');
function wpmart_custom_cron_schedules($schedules) {
    $schedules['every_six_hours'] = [
        'interval' => 6 * 3600, // 6 часов
        'display' => __('Каждые 6 часов')
    ];
    return $schedules;
}

// Изменяем расписание запуска
if (!wp_next_scheduled('wpmart_update_products_cron_hook')) {
    wp_schedule_event(time(), 'every_six_hours', 'wpmart_update_products_cron_hook');
}

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

  • В админке WooCommerce откройте карточку товара и проверьте, изменились ли название и описание.
  • Запустите cron вручную с помощью плагина WP Crontrol или командой WP-CLI: wp cron event run wpmart_update_products_cron_hook.
  • Проверьте логи ошибок сервера и WordPress на предмет сбоев при выполнении.

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

  • Товар не обновляется: Проверьте правильность ID товара и наличие товара в базе. Используйте wc_get_product() для проверки.
  • Крон не запускается: Убедитесь, что wp-cron.php вызывается, или настройте системный cron для вызова wget https://site.ru/wp-cron.php?doing_wp_cron.
  • Изменения не сохраняются: Проверьте, нет ли конфликтов с другими плагинами, кешем или правами доступа к базе данных.

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

  • Не обновляйте большое число товаров за один запуск cron — разбивайте задачи на несколько частей, чтобы избежать таймаутов.
  • Логируйте изменения в отдельный файл или таблицу для отладки и аудита.
  • Ограничьте права пользователя, под которым работает cron, чтобы исключить возможность уязвимостей из-за неправильного кода.
  • Используйте transient API для кеширования данных, если на основе обновлений делаются дополнительные запросы.

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

МетодПлюсыМинусыКомпромисс
Код в functions.php + wp-cronНет плагинов, полный контроль, легковесноТребует навыков, возможны ошибки при обновлениях темыСоздать отдельный плагин для надежности
Плагины автоподдержки товаровУдобно, готовый функционалНагрузка, ограниченная кастомизация, возможна платаИспользовать только проверенные, с хорошей репутацией
Внешние скрипты с WP-CLIМощно, можно запускать вне WordPressТребует серверного доступа, сложнее в настройкеИспользовать для больших магазинов с автоматизацией
WooCommerce: как автоматически отключать товары после продажи
13.06.2026
Как изменить URL страницы без перенаправления в WordPress
15.12.2025
WooCommerce: как автоматически удалять товар после успешной оплаты без плагинов
22.05.2026
Как автоматизировать удаление спам-комментариев в WordPress
22.02.2026
WooCommerce: автоматическое отключение товара после продажи
10.06.2026