Диагностика задачи: зачем менять названия и описания товаров автоматически
В интернет-магазинах часто возникает необходимость менять информацию о товарах по расписанию: например, для акций, сезонных предложений, обновления характеристик или корректировок текста без ручного вмешательства. Ручное редактирование неудобно и требует времени, особенно при большом ассортименте.
Основной вопрос: как настроить автоматическое обновление названий и описаний товаров 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 | Требует серверного доступа, сложнее в настройке | Использовать для больших магазинов с автоматизацией |