WooCommerce: исключение товаров по атрибутам при импорте CSV

Проблема: необходимость исключать товары по определённым атрибутам при импорте CSV в WooCommerce

При импорте товаров через стандартный CSV-импортёр WooCommerce часто возникает задача автоматически исключать из импорта товары с определёнными атрибутами (например, цветом "серый" или статусом "неактивен"). Стандартные средства WooCommerce этого не позволяют — импорт идёт без фильтрации.

Почему важно фильтровать товары по атрибутам на этапе импорта

  • Избежать добавления неподходящих или устаревших товаров.
  • Сохранить чистоту и актуальность каталога.
  • Экономить время на ручной очистке после импорта.

Диагностика: как понять, что товары с ненужными атрибутами импортируются

Если после импорта вы видите в каталоге товары, которые по вашим правилам не должны были появиться, проверьте CSV-файл на наличие таких атрибутов. Убедитесь, что импортёр WooCommerce не предоставляет встроенных фильтров по атрибутам.

Для диагностики можно временно добавить следующий код в functions.php вашей темы — он выведет список атрибутов импортируемых товаров в лог:

add_action('woocommerce_product_import_inserted_product_object', function($product) {
    $attributes = $product->get_attributes();
    error_log('Импорт товара ID ' . $product->get_id() . ': атрибуты - ' . json_encode($attributes));
});

Пошаговое решение: исключаем товары по атрибутам при импорте CSV

Стандартный импортёр WooCommerce не поддерживает фильтрацию, но можно использовать хук woocommerce_product_import_pre_insert_product_object, чтобы проверить атрибуты и отменить импорт нужных товаров.

Вот пример кода, который отменяет импорт товара, если у него есть атрибут pa_color со значением grey:

add_filter('woocommerce_product_import_pre_insert_product_object', function($product, $data) {
    $attributes = $product->get_attributes();
    if (isset($attributes['pa_color'])) {
        $color = $attributes['pa_color'];
        // Атрибут может быть объектом или массивом в зависимости от версии WooCommerce
        if (is_object($color)) {
            $terms = $color->get_options();
            if (in_array('grey', $terms)) {
                // Отменяем импорт, возвращая false
                return false;
            }
        }
    }
    return $product;
}, 10, 2);

Если нужно фильтровать по нескольким атрибутам, добавьте соответствующие проверки внутри функции.

Как адаптировать проверку под другие атрибуты

  • Замените pa_color на нужный slug атрибута.
  • Подставьте нужные значения для фильтрации.
  • Учитывайте, что названия атрибутов в WooCommerce начинаются с pa_ (product attribute).

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

1. Подготовьте CSV с товарами, в которых есть и подходящие, и исключаемые атрибуты.
2. Запустите импорт через WooCommerce.
3. Проверьте в админке, что товары с указанными атрибутами не появились.
4. Для дополнительной проверки можно добавить error_log внутри фильтра, чтобы фиксировать попытки исключения.

Частые ошибки и способы их устранения

  • Фильтр не срабатывает: убедитесь, что используете правильный хук woocommerce_product_import_pre_insert_product_object и что функция возвращает false для отмены импорта.
  • Атрибут не определяется: проверьте правильность слага атрибута, используйте отладку error_log(print_r($attributes, true)), чтобы увидеть структуру.
  • Импорт прерывается с ошибкой: убедитесь, что возвращаете либо объект продукта, либо false, а не другие типы данных.

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

  • Отключайте временно ненужные плагины во время импорта, чтобы избежать конфликтов.
  • Используйте WP_DEBUG_LOG для отладки, но не оставляйте логи включёнными в продакшене.
  • Если импорт большой, разбивайте CSV на части, чтобы не перегружать сервер.
  • Обязательно делайте резервную копию базы перед массовым импортом.

Сравнение вариантов решения фильтрации импортируемых товаров

МетодПлюсыМинусы
Фильтрация через хук woocommerce_product_import_pre_insert_product_objectНе требует сторонних плагинов, гибкость условий, интеграция в процесс импортаТребует программирования, может быть сложна для новичков
Использование плагинов фильтрации CSV перед импортомПростой визуальный интерфейс, не требует кодаМожет быть платным, ограниченная гибкость, дополнительный шаг импорта
Редактирование CSV вручнуюПолный контроль над данными, не требует кодаТрудоёмко, риск ошибок, не подходит для больших каталогов
⭐⭐⭐⭐⭐