Проблема: необходимость исключать товары по определённым атрибутам при импорте 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 вручную | Полный контроль над данными, не требует кода | Трудоёмко, риск ошибок, не подходит для больших каталогов |