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

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

При импорте товаров в WooCommerce через стандартный инструмент импорта CSV часто возникает проблема: новые значения атрибутов не применяются, либо старые не обновляются. Это связано с тем, что WooCommerce по умолчанию не всегда корректно обрабатывает обновление атрибутов при повторном импорте товаров. В результате атрибуты остаются без изменений, что влияет на фильтрацию и отображение товаров.

Как проверить проблему

  • Импортируйте CSV с обновлёнными значениями атрибутов для существующих товаров.
  • Перейдите в карточку товара в админке WooCommerce и проверьте, обновились ли атрибуты.
  • Если атрибуты остались прежними, значит WooCommerce не обновил их.

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

Для решения задачи нужно добавить кастомный PHP-код, который подключится к процессу импорта и обновит атрибуты товара с новыми значениями из CSV. Такой код можно добавить в functions.php вашей темы или в отдельный плагин.

Код для обновления атрибутов при импорте

<?php
add_action('woocommerce_product_import_inserted_product_object', 'update_product_attributes_on_import', 10, 2);

function update_product_attributes_on_import( $product, $data ) {
    // Проверяем, что в CSV есть поле с атрибутами в формате 'pa_color|pa_size'
    if ( empty($data['attributes']) ) {
        return;
    }

    // Разбор строки атрибутов: ожидается формат 'pa_color:Red|pa_size:XL'
    $attributes_raw = explode('|', $data['attributes']);
    $attributes = array();

    foreach ( $attributes_raw as $attr_str ) {
        list($name, $value) = explode(':', $attr_str);
        $attributes[ sanitize_title($name) ] = trim($value);
    }

    // Подготовка атрибутов для WooCommerce
    $product_attributes = array();

    foreach ( $attributes as $attr_name => $attr_value ) {
        $taxonomy = wc_sanitize_taxonomy_name($attr_name);
        $is_taxonomy = taxonomy_exists($taxonomy);

        if ( $is_taxonomy ) {
            // Если атрибут - таксономия
            $term = get_term_by('name', $attr_value, $taxonomy);
            if ( ! $term ) {
                // Создаем термин, если не существует
                $term_id = wp_insert_term( $attr_value, $taxonomy );
                if ( is_wp_error( $term_id ) ) {
                    continue;
                }
            }
            // Назначаем термин товару
            wp_set_object_terms( $product->get_id(), $attr_value, $taxonomy, true );

            // Создаем объект атрибута
            $product_attributes[ $taxonomy ] = new WC_Product_Attribute();
            $product_attributes[ $taxonomy ]->set_id( wc_attribute_taxonomy_id_by_name( $taxonomy ) );
            $product_attributes[ $taxonomy ]->set_name( $taxonomy );
            $product_attributes[ $taxonomy ]->set_options( array( $attr_value ) );
            $product_attributes[ $taxonomy ]->set_position( 0 );
            $product_attributes[ $taxonomy ]->set_visible( true );
            $product_attributes[ $taxonomy ]->set_variation( false );
        } else {
            // Если атрибут простой (не таксономия)
            $custom_attr = new WC_Product_Attribute();
            $custom_attr->set_id( 0 );
            $custom_attr->set_name( $attr_name );
            $custom_attr->set_options( array_map('trim', explode(',', $attr_value)) );
            $custom_attr->set_position( 0 );
            $custom_attr->set_visible( true );
            $custom_attr->set_variation( false );

            $product_attributes[ $attr_name ] = $custom_attr;
        }
    }

    // Присваиваем атрибуты товару и сохраняем
    if ( ! empty($product_attributes) ) {
        $product->set_attributes( $product_attributes );
        $product->save();
    }
}

Важный момент: в вашем CSV должен быть столбец attributes с атрибутами в формате pa_color:Red|pa_size:XL. Если такой столбец отсутствует, дополните CSV или адаптируйте код под ваши реальные названия колонок.

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

  • После импорта CSV откройте карточку импортированного товара в WooCommerce
  • Перейдите на вкладку «Атрибуты» и убедитесь, что новые значения появились и соответствуют данным из CSV
  • Если атрибуты таксономии, проверьте, что новые термины появились в разделе «Атрибуты» WooCommerce (Товары — Атрибуты)
  • Проверьте на фронте сайта, что фильтры по атрибутам работают корректно

Частые ошибки и как их исправить

  • Ошибка: Атрибуты из CSV не попадают в товар.
    Причина: неверный формат строки атрибутов или неправильное имя колонки в CSV.
    Решение: проверьте, что колонка называется именно attributes и данные идут в формате pa_color:Red|pa_size:XL.
  • Ошибка: Термины атрибутов не создаются.
    Причина: недостаточно прав пользователя или ошибки в функциях создания терминов.
    Решение: убедитесь, что пользователь, под которым выполняется импорт, имеет права на редактирование таксономий, и проверьте логи ошибок.
  • Ошибка: Атрибуты обновляются, но не видны на фронте.
    Причина: кэширование или неправильные настройки отображения атрибутов.
    Решение: очистите кэш сайта и плагинов, проверьте включена ли видимость атрибутов в настройках товара.

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

  • Добавляйте код обновления атрибутов только в тестовой среде, прежде чем запускать на продакшене.
  • Для больших CSV-файлов используйте WP CLI или специализированные импортеры, чтобы избежать таймаутов.
  • Используйте транзакции базы данных, если импортируете в несколько шагов, чтобы избежать частичного обновления товара.
  • Проверяйте права доступа и валидность данных, чтобы избежать внедрения вредоносного кода через CSV.
  • Отключайте ненужные плагины во время импорта для снижения нагрузки и предотвращения конфликтов.

Сравнение способов обновления атрибутов при импорте CSV

МетодПлюсыМинусыКогда использовать
Стандартный импорт WooCommerce Прост в использовании, не требует кода Не всегда обновляет атрибуты корректно при повторном импорте Импорт новых товаров без изменений атрибутов
Кастомный код с хуком woocommerce_product_import_inserted_product_object Полный контроль обновления атрибутов, можно создавать новые термины Требует навыков программирования, тестирования Регулярное обновление атрибутов при импорте, сложные сценарии
Плагины импорта с расширенными настройками Готовые решения, поддержка, GUI Могут быть платными, ограничены по кастомизации Если не хотите писать код, готовы платить за готовое
Как закрыть от индексации страницы поискового фильтра в WordPress
19.08.2026
Как настроить robots.txt в WordPress, чтобы не закрыть важный контент
23.08.2026