Как создать автоматический импорт атрибутов в WooCommerce с помощью кода

В WooCommerce атрибуты являются важной частью описания товаров: они помогают пользователям фильтровать и выбирать нужные варианты. Но если вы работаете с большим количеством товаров и получаете данные из внешних источников, ручное добавление атрибутов становится крайне неэффективным. В этой статье разберём, как создать автоматический импорт атрибутов в WooCommerce с помощью кастомного кода и как можно упростить этот процесс с помощью плагинов.

Почему автоматический импорт атрибутов важен для WooCommerce

Автоматизация импорта атрибутов экономит время и снижает риск ошибок. При частом обновлении ассортимента, например, при загрузке товаров от поставщиков в формате CSV или JSON, необходимо быстро и корректно создавать и обновлять атрибуты.

Без автоматизации приходится вручную создавать атрибуты через админку WooCommerce, что неудобно и не масштабируется. Автоматический импорт позволяет интегрировать WooCommerce с внешними системами и поддерживать актуальность данных.

В большинстве случаев импорт атрибутов идёт вместе с импортом товаров, но можно сделать отдельный скрипт, который будет только обновлять или добавлять атрибуты.

Основные этапы автоматического импорта атрибутов в WooCommerce

1. Получение данных об атрибутах из внешнего источника (CSV, JSON, API и т.п.).

2. Проверка существования атрибутов в базе WooCommerce.

3. Создание новых атрибутов и терминов, если они отсутствуют.

4. Привязка атрибутов к товарам.

Получение и подготовка данных

Для примера возьмём простой CSV-файл с колонками: product_sku, attribute_name, attribute_value.

Парсим CSV, группируем данные по SKU товара, формируем массив атрибутов для каждого товара.

Проверка и создание атрибутов в WooCommerce

WooCommerce хранит атрибуты как таксономии с префиксом pa_. Для создания атрибута необходимо зарегистрировать термин таксономии.

Пример функции для создания атрибута и терминов с префиксом wpmarket_:

function wpmarket_create_attribute($name) {
    global $wpdb;
    $slug = wc_sanitize_taxonomy_name($name);
    $exists = $wpdb->get_var($wpdb->prepare("SELECT attribute_id FROM {$wpdb->prefix}woocommerce_attribute_taxonomies WHERE attribute_name = %s", $slug));
    if (!$exists) {
        $wpdb->insert(
            "{$wpdb->prefix}woocommerce_attribute_taxonomies",
            [
                'attribute_name' => $slug,
                'attribute_label' => $name,
                'attribute_type' => 'select',
                'attribute_orderby' => 'menu_order',
                'attribute_public' => 1
            ]
        );
        delete_transient('wc_attribute_taxonomies');
        do_action('woocommerce_attribute_added', $wpdb->insert_id);
    }
    return $slug;
}

Эта функция проверяет, есть ли атрибут с таким именем, и если нет — добавляет его в базу WooCommerce.

Далее создаём или получаем термины для значений атрибута:

function wpmarket_create_attribute_term($taxonomy, $term_name) {
    if (!term_exists($term_name, $taxonomy)) {
        wp_insert_term($term_name, $taxonomy);
    }
}

Привязка атрибутов к товарам

После создания атрибутов и терминов важно привязать их к конкретным товарам. Для этого используем функцию wp_set_object_terms. Пример кода:

function wpmarket_set_product_attributes($product_id, $attributes) {
    $product_attributes = [];
    foreach ($attributes as $attr_name => $attr_values) {
        $slug = wc_sanitize_taxonomy_name($attr_name);
        $taxonomy = 'pa_' . $slug;
        wpmarket_create_attribute($attr_name);
        foreach ($attr_values as $value) {
            wpmarket_create_attribute_term($taxonomy, $value);
        }
        wp_set_object_terms($product_id, $attr_values, $taxonomy);
        $product_attributes[$taxonomy] = [
            'name' => $taxonomy,
            'value' => implode(' | ', $attr_values),
            'position' => 0,
            'is_visible' => 1,
            'is_variation' => 1,
            'is_taxonomy' => 1
        ];
    }
    update_post_meta($product_id, '_product_attributes', $product_attributes);
}

Эта функция принимает ID товара и массив атрибутов, создаёт таксономии и термины, а затем обновляет метаданные товара.

Пример полного импорта из CSV с использованием кода

Рассмотрим упрощённый пример импорта атрибутов из CSV:

function wpmarket_import_attributes_from_csv($csv_file_path) {
    if (!file_exists($csv_file_path)) return;

    $handle = fopen($csv_file_path, 'r');
    if (!$handle) return;

    $header = fgetcsv($handle);
    $data = [];

    while (($row = fgetcsv($handle)) !== false) {
        $row_data = array_combine($header, $row);
        $sku = $row_data['product_sku'];
        $attr_name = $row_data['attribute_name'];
        $attr_value = $row_data['attribute_value'];

        if (!isset($data[$sku])) {
            $data[$sku] = [];
        }
        if (!isset($data[$sku][$attr_name])) {
            $data[$sku][$attr_name] = [];
        }
        $data[$sku][$attr_name][] = $attr_value;
    }
    fclose($handle);

    foreach ($data as $sku => $attributes) {
        $product_id = wc_get_product_id_by_sku($sku);
        if (!$product_id) continue;
        wpmarket_set_product_attributes($product_id, $attributes);
    }
}

Вызовите эту функцию, передав путь к CSV-файлу, и атрибуты автоматически добавятся к товарам.

Использование плагинов для автоматизации импорта атрибутов

Если вы не хотите писать код с нуля, существуют мощные плагины для импорта товаров и атрибутов:

  • WPMarket — плагин для автоматического импорта товаров с атрибутами из разных форматов. Позволяет настраивать маппинг атрибутов и автоматизировать обновления.
  • WP All Import + WooCommerce Add-On — универсальный инструмент для импорта любых данных, включая атрибуты.

Плагин WPMarket, доступный на wpshop.ru, особенно полезен для регулярного импорта от поставщиков с возможностью тонкой настройки логики.

Советы и рекомендации

1. Всегда делайте резервную копию сайта перед массовым импортом.

2. Для больших объёмов данных используйте пакетный импорт и запускайте скрипты через WP-CLI, чтобы избежать таймаутов.

3. Проверяйте корректность слага атрибутов и терминов, чтобы избежать конфликтов с уже существующими таксономиями.

4. Для тестирования используйте товары с минимальным набором атрибутов, чтобы убедиться в правильности работы импорта.

Обработка ошибок и логирование

Добавляйте логирование во все функции импорта, чтобы фиксировать ошибки и предупреждения. Используйте стандартные функции WordPress для логирования в файл или вывод ошибок в админку.

Заключение

Автоматический импорт атрибутов в WooCommerce — задача, решаемая с помощью грамотного кода и/или специализированных плагинов. Правильно реализованный процесс позволяет поддерживать актуальность каталога, экономить время и повышать качество данных.

Используйте приведённые функции как основу и расширяйте их под свои нужды. А если нужно быстрое решение — попробуйте плагин WPMarket.

Как создать настройку с AJAX в плагине WordPress
29.12.2025
Как создать собственный виджет для WordPress
26.11.2025
Как реализовать автоматическое отключение неиспользуемых плагинов WordPress
28.01.2026
WooCommerce: как автоматически очистить кеш после обновления товара
29.05.2026
Как добавить автоматическое удаление товаров WooCommerce по старым датам
10.05.2026