Диагностика задачи: зачем автоматизировать изменение данных товаров
В WooCommerce часто возникает необходимость массово обновлять названия или описания товаров в зависимости от различных условий — например, добавлять штамп "Скидка" или обновлять описание при изменении цены или статуса. Делать это вручную неудобно и ресурсоёмко, особенно при большом каталоге. Автоматизация решает проблему своевременного и корректного обновления данных без ручного вмешательства.
Как отследить момент обновления товара
Для автоматического изменения названия и описания нужно поймать событие обновления товара. В WooCommerce это можно сделать с помощью хука save_post_product, который срабатывает при сохранении данных товара.
add_action('save_post_product', 'wpfront_update_product_title_description', 10, 3);Аргументы функции обычно: ID поста, объект поста и флаг обновления.
Пошаговое решение: пример кода для автоматического изменения названия и описания
Ниже пример функции, которая добавляет к названию товара приставку " - Обновлён" и дописывает в описание текст "Обновлено автоматически" при каждом сохранении товара.
function wpfront_update_product_title_description($post_ID, $post, $update) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Проверяем тип записи
if ($post->post_type !== 'product') return;
// Получаем текущий объект товара
$product = wc_get_product($post_ID);
if (!$product) return;
// Изменяем название, если еще не содержит суффикс
$title = $post->post_title;
if (strpos($title, ' - Обновлён') === false) {
$new_title = $title . ' - Обновлён';
// Обновляем название товара
wp_update_post(array(
'ID' => $post_ID,
'post_title' => $new_title
));
}
// Обновляем описание
$description = $product->get_description();
if (strpos($description, 'Обновлено автоматически') === false) {
$new_description = $description . '\n\nОбновлено автоматически';
$product->set_description($new_description);
$product->save();
}
}Как добавить код
Этот код можно добавить в functions.php дочерней темы или в отдельный плагин. После этого при каждом обновлении товара название и описание будут автоматически дополняться.
Проверка результата
1. Откройте любой товар в админке WooCommerce.
2. Измените любое поле и сохраните.
3. Проверьте, что к названию добавился суффикс " - Обновлён".
4. Проверьте описание — в конце должен появиться текст "Обновлено автоматически".
5. Если изменений нет, проверьте логи ошибок и правильность подключения функции.
Частые ошибки и как их исправить
- Бесконечный цикл обновления: если внутри хука для сохранения вызывается
wp_update_postбез условий, функция срабатывает повторно. Решение: проверять, не добавлен ли уже суффикс в название. - Отсутствие проверки типа записи: функция запускается для всех типов, что приводит к ошибкам. Решение: проверять
$post->post_type === 'product'. - Автосохранение: если не фильтровать
DOING_AUTOSAVE, код сработает при автосохранении и внесет нежелательные изменения. - Конфликты с другими плагинами: если другой плагин также изменяет название или описание, возможны коллизии. Проверьте порядок загрузки хуков и при необходимости используйте более высокие приоритеты.
Практические советы по безопасности и производительности
- Используйте минимальный объем изменений в хуках сохранения — не выполняйте тяжёлую логику.
- Кэшируйте результаты, если в будущем будете добавлять запросы к базе.
- Всегда проверяйте права пользователя, если планируете расширять функционал для фронтенда.
- Для массового изменения большого количества товаров лучше использовать WP-CLI скрипт вне хука сохранения, чтобы избежать таймаутов.
Сравнение способов автоматического обновления данных товара
| Метод | Преимущества | Недостатки | Пример использования |
|---|---|---|---|
Хук save_post_product | Автоматически срабатывает при сохранении товара, прост в реализации | Риск бесконечного цикла, нагрузка при массовом обновлении | Автоматическое добавление текста к названию и описанию |
| WP-CLI скрипт | Быстрая обработка большого количества товаров, без нагрузки на сайт | Не автоматичен, требует запуска вручную или по расписанию | Массовое обновление описаний перед распродажей |
| Пользовательский плагин с Cron задачей | Автоматизация без вмешательства пользователя, можно задать периодичность | Нужно настраивать планировщик, дополнительный код | Обновление описаний каждую ночь |