wpconsult.ru wordpress WP Consult

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

Проблема: необходимость изменить цену и название товара при импорте 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);

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

После добавления кода:

  1. Подготовьте CSV с товарами для импорта.
  2. Импортируйте его через WooCommerce > Товары > Импорт.
  3. Откройте карточку импортированного товара в WooCommerce и проверьте, что цена увеличена на 10% (или по условию) и к названию добавлен суффикс.
  4. Если цены не изменились, проверьте, что фильтр добавлен корректно и активен (например, временно добавьте 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 и др.)Большой функционал, визуальный интерфейсПлатные, могут быть избыточными для простых задачИспользовать при сложных сценариях, если бюджет позволяет
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙