Проблема: необходимость изменить цену и название товара при импорте CSV в WooCommerce
Многие магазины на WooCommerce используют импорт CSV для массового обновления каталога. Часто требуется не просто загрузить данные, а автоматически изменить цену и название товаров в процессе импорта, например, добавить наценку или суффикс к названию. Стандартный импорт WooCommerce не даёт гибкости для таких изменений без дополнительной доработки.
Диагностика: как проверить, что при импорте данные не меняются
Если вы импортируете CSV через стандартный инструмент WooCommerce (WooCommerce > Товары > Импорт), и заметили, что цена и название не соответствуют вашим ожиданиям (например, вы пытались добавить наценку в CSV, но она не применяется, или хотите автоматически добавить приставку к названию), причина в том, что импорт не поддерживает динамическую обработку полей. Импорт просто подставляет значения из CSV в базу.
Чтобы проверить, что импорт идёт без изменений:
- Откройте CSV-файл и убедитесь, что в нём исходные данные.
- Импортируйте файл через WooCommerce > Импорт товаров.
- После импорта откройте карточку товара в админке и сравните название и цену с CSV.
Если они совпадают, значит никакая автоматическая обработка не происходит.
Решение: добавляем обработчик для изменения данных при импорте CSV
Для изменения данных во время импорта CSV в WooCommerce можно использовать фильтр woocommerce_product_import_pre_insert_product_object. Он позволяет получить объект товара WC_Product перед сохранением и изменить любые свойства.
Например, чтобы добавить 10% к цене и суффикс « - Новинка» к названию, добавьте следующий код в functions.php вашей темы или в отдельный плагин:
add_filter('woocommerce_product_import_pre_insert_product_object', function($product, $data) {
// Изменяем цену
$price = $product->get_regular_price();
if ($price !== '') {
$new_price = $price * 1.1; // +10%
$product->set_regular_price($new_price);
}
// Добавляем суффикс к названию
$title = $product->get_name();
if ($title !== '') {
$product->set_name($title . ' - Новинка');
}
return $product;
}, 10, 2);Объяснение:
$product— объект товара, у которого мы меняем цену и название.$data— ассоциативный массив с данными из CSV (можно использовать для условий).- Возвращаем изменённый объект для сохранения.
Как добавить условие для изменения только определённых товаров
Если нужно менять только товары из определённой категории или с определённым тегом, можно расширить проверку:
add_filter('woocommerce_product_import_pre_insert_product_object', function($product, $data) {
if (isset($data['categories']) && strpos($data['categories'], 'Акция') !== false) {
$price = $product->get_regular_price();
if ($price !== '') {
$product->set_regular_price($price * 1.2); // +20% для категории Акция
}
$product->set_name($product->get_name() . ' - Акция');
}
return $product;
}, 10, 2);Проверка результата после внедрения
После добавления кода:
- Подготовьте CSV с товарами для импорта.
- Импортируйте его через WooCommerce > Товары > Импорт.
- Откройте карточку импортированного товара в WooCommerce и проверьте, что цена увеличена на 10% (или по условию) и к названию добавлен суффикс.
- Если цены не изменились, проверьте, что фильтр добавлен корректно и активен (например, временно добавьте
error_logвнутри функции).
Частые ошибки и как их исправить
- Код не срабатывает: Проверьте, что код находится в активной теме или плагине. Для отладки используйте
error_log('filter triggered'). - Цена не меняется: Убедитесь, что цена в CSV указана и корректно парсится. Проверьте, что
$product->get_regular_price()возвращает число. - Название не меняется: Возможно, в CSV используется поле
post_titleили другое. Всегда работайте с методом$product->set_name(). - Изменения применяются ко всем товарам, а нужно выборочно: Используйте условные проверки по категориям, тегам или другим полям из массива
$data.
Практические советы по производительности и безопасности
- Обрабатывайте только нужные товары, чтобы не замедлять импорт.
- Не добавляйте тяжелую логику или внешние запросы внутри фильтра — это замедлит импорт.
- Всегда делайте резервные копии сайта и базы перед массовым импортом.
- Для сложных преобразований лучше готовить CSV заранее, а не менять данные в процессе импорта.
Сравнение вариантов реализации автоматической корректировки данных при импорте
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Изменение CSV вручную перед импортом | Просто, не требует кода | Трудоёмко при больших объёмах, риск ошибок | Использовать Excel или скрипты для подготовки CSV |
Использование фильтра woocommerce_product_import_pre_insert_product_object | Гибко, автоматизация, интеграция с логикой WP | Требует навыков PHP, ошибки могут нарушить импорт | Добавлять только проверенный код, тестировать на копии сайта |
| Плагины для расширенного импорта (WP All Import и др.) | Большой функционал, визуальный интерфейс | Платные, могут быть избыточными для простых задач | Использовать при сложных сценариях, если бюджет позволяет |