Плагин WooCommerce Local to Global Attributes: как перевести локальные атрибуты в глобальные - Компьюти
Logo КОМПЬЮТИ

Плагин WooCommerce Local to Global Attributes: как перевести локальные атрибуты в глобальные

Время на прочтение: 6 мин.

Наш плагин WooCommerce Local to Global Attributes помогает перенести локальные атрибуты товаров в глобальные атрибуты WooCommerce. Он создаёт таксономии и значения, заменяет атрибуты у товаров и обновляет данные вариаций. В статье разберём, как работает плагин, когда он нужен и как безопасно выполнить конвертацию.

Зачем переводить локальные атрибуты WooCommerce

WooCommerce поддерживает два варианта атрибутов:

  • локальные атрибуты товара;
  • глобальные атрибуты магазина.

Локальный атрибут создаётся прямо внутри карточки товара. Он действует только для этого товара.

Глобальный атрибут создаётся на уровне WooCommerce. Его можно использовать в разных товарах.

преимущество глобальных атрибутов
преимущества глобальных атрибутов

Например, магазин продаёт шторы. В товарах встречается атрибут «Цвет»:

  • Белый;
  • Серый;
  • Бежевый;
  • Чёрный.

Если каждый товар содержит свой локальный атрибут «Цвет», магазин получает множество независимых наборов данных.

Глобальный атрибут решает эту проблему. WooCommerce создаёт таксономию вроде pa_color. Значения становятся терминами этой таксономии.

Это важно для крупных каталогов. Единая структура упрощает:

  • фильтрацию товаров;
  • создание вариаций;
  • повторное использование атрибутов;
  • управление каталогом;
  • поддержку магазина;
  • дальнейшую автоматизацию.

Наш плагин WooCommerce Local to Global Attributes автоматизирует такой перенос.

Плагин WooCommerce Local to Global Attributes: как он работает

Логика плагина построена вокруг последовательной обработки товаров.

работа плагина

Сценарий выглядит так:

Локальный атрибут → глобальный атрибут → термины → атрибут товара → данные вариаций.

Плагин сначала получает список товаров. Затем обрабатывает их пакетами.

В настройках можно:

  • указать ID конкретных товаров;
  • оставить поле пустым и обработать все товары;
  • задать размер пакета;
  • выполнить dry-run;
  • запустить реальную конвертацию.

По умолчанию размер пакета составляет 20 товаров. Код ограничивает значение диапазоном от 1 до 200.

Шаг 1. Плагин получает товары

Сначала формируется список ID товаров.

Можно передать конкретные ID:

123, 456, 789

Если поле пустое, плагин получает товары типа product.

Список сохраняется во временном хранилище WordPress — transient. Это позволяет продолжать пакетную обработку.

Шаг 2. Плагин находит локальные атрибуты

Для каждого товара вызывается:

$attributes = $product->get_attributes( 'edit' );

Затем плагин проверяет каждый атрибут.

Главное условие — атрибут должен быть локальным. Глобальные атрибуты уже имеют идентификатор таксономии.

Поэтому код пропускает атрибуты, у которых:

$attribute->get_id()

возвращает значение.

Иными словами, плагин не пытается повторно конвертировать уже глобальные атрибуты.

Как создаётся глобальный атрибут

После обнаружения локального атрибута плагин определяет его slug.

Например:

Длина карниза

может получить slug:

dlina-karniza

В коде предусмотрена отдельная карта slug:

return [
    'Длина карниза' => 'dlina-karniza',
];

Это особенно полезно для русскоязычных названий. Явная карта позволяет контролировать итоговые идентификаторы и снижать риск коллизий.

Если отдельного правила нет, используется:

sanitize_title( $name );

После этого формируется имя таксономии WooCommerce:

$taxonomy = wc_attribute_taxonomy_name( $slug );

Для атрибута color результатом будет таксономия pa_color.

Создание атрибута через WooCommerce API

Плагин использует стандартную функцию WooCommerce:

$attr_id = wc_create_attribute( [
    'name'         => $name,
    'slug'         => $slug,
    'type'         => 'select',
    'order_by'     => 'menu_order',
    'has_archives' => false,
] );

Это важный момент.

Плагин не просто записывает произвольные значения в мета-поля. Он создаёт полноценный глобальный атрибут WooCommerce.

Что происходит со значениями атрибута

Создать глобальный атрибут недостаточно.

Допустим, у товара был локальный атрибут:

Цвет: Белый | Серый | Бежевый

Глобальный атрибут должен получить соответствующие термины.

Плагин получает значения через:

$values = $attribute->get_options();

Затем для каждого значения он ищет существующий термин.

$term = get_term_by(
    'name',
    $value,
    $taxonomy
);

Если термин уже существует, плагин использует его ID.

Если термина нет, он создаётся:

$new = wp_insert_term(
    $value,
    $taxonomy
);

Так магазин постепенно получает единую структуру значений.

Замена локального атрибута на глобальный

После создания атрибута и его терминов плагин формирует новый объект:

$new_attr = new WC_Product_Attribute();

Далее задаются:

$new_attr->set_id(
    wc_attribute_taxonomy_id_by_name( $slug )
);

$new_attr->set_name( $taxonomy );
$new_attr->set_options( $term_ids );

При этом сохраняются важные свойства исходного атрибута:

  • позиция;
  • видимость;
  • участие в вариациях.

Например:

$new_attr->set_variation(
    $attribute->get_variation()
);

После этого старый локальный атрибут удаляется из массива. На его место записывается глобальный.

Товар сохраняется через:

$product->set_attributes( $attributes );
$product->save();

Как плагин работает с вариациями

Это один из самых важных этапов.

Простая замена атрибута недостаточна для вариативного товара.

У вариации WooCommerce может храниться мета-ключ:

attribute_Цвет

После перехода на глобальный атрибут нужен формат:

attribute_pa_color

Именно такую замену выполняет плагин.

Он получает все дочерние записи product_variation и анализирует их мета-поля.

Затем находятся ключи, начинающиеся с:

attribute_

Уже глобальные ключи с префиксом pa_ пропускаются.

Для остальных формируется новый ключ:

$new_key = 'attribute_pa_' . $slug;

Например:

attribute_Цвет

превращается в:

attribute_pa_color

При реальной конвертации плагин сначала записывает новое значение:

update_post_meta(
    $var_id,
    $new_key,
    $value
);

После этого старое мета-поле удаляется:

delete_post_meta(
    $var_id,
    $meta_key
);

Это позволяет сохранить связь между товаром и его вариациями.

Dry-run: зачем нужен предпросмотр

пакетная обработка и предосмотры

Массовая миграция атрибутов требует осторожности.

Поэтому в плагине предусмотрен режим dry-run.

Он не должен менять базу данных. Вместо этого плагин показывает предполагаемые операции.

Например:

[DRY] Создать атрибут: Цвет (pa_color)
[DRY] Термин 'Белый' → pa_color
[DRY] Вариация 125: attribute_Цвет → attribute_pa_color

После анализа можно запускать реальную конвертацию.

В интерфейсе есть две отдельные кнопки:

  • «Предпросмотр (dry-run)»;
  • «Запустить конвертацию».

Для рабочего интернет-магазина это особенно полезно.

Почему используется пакетная обработка

Большой каталог нельзя бездумно обрабатывать одним длинным PHP-запросом.

Например, в магазине может быть 10 000 товаров. У части из них есть вариации.

Один запрос может упереться в:

  • лимит времени PHP;
  • лимит памяти;
  • ограничения хостинга;
  • таймаут веб-сервера.

Поэтому плагин обрабатывает товары пакетами.

После каждого пакета AJAX возвращает статистику и следующий offset. Интерфейс обновляет прогресс:

Обработано 420 из 1000 (42%)

Для пользователя это выглядит как единый процесс. Технически же каталог обрабатывается частями.

Безопасность перед запуском

Перед миграцией мы рекомендуем сделать резервную копию базы данных.

Сам код плагина также выводит предупреждение:

Сделайте резервную копию БД. Сначала запустите Предпросмотр на 1 товаре.

Перед массовой обработкой стоит проверить:

  • резервную копию базы;
  • несколько обычных товаров;
  • несколько вариативных товаров;
  • кириллические названия атрибутов;
  • существующие глобальные атрибуты;
  • корректность slug;
  • работу фильтров после миграции.

Особое внимание нужно уделить карте slug для нестандартных названий.

Что получает интернет-магазин после конвертации

Предположим, до миграции каждый товар имел локальный атрибут «Цвет».

После обработки появляется единый глобальный атрибут:

Цвет
└── pa_color
    ├── Белый
    ├── Серый
    ├── Бежевый
    └── Чёрный

Товары используют одну и ту же структуру.

Это упрощает дальнейшую работу с каталогом.

Практический сценарий

Вы столкнулись с проблемой.

В каталоге 500 товаров. Атрибуты создавались вручную. Названия совпадают, но технически они независимы.

Мы решаем проблему.

Плагин анализирует локальные атрибуты. Затем создаёт глобальные атрибуты и термины. После этого он обновляет товары и вариации.

Результат.

Каталог получает единую структуру атрибутов. Администратор может использовать глобальные значения повторно.

Статистика и контроль результата

Плагин собирает четыре основных показателя:

  • созданные глобальные атрибуты;
  • созданные термины;
  • количество изменённых товаров;
  • количество обновлённых вариаций.

После завершения эти данные выводятся в интерфейсе.

Это удобно для контроля миграции.

Например:

Атрибутов создано: 8
Терминов: 146
Заменено у товаров: 734
Вариаций обновлено: 1280

По такой статистике проще проверить ожидаемый результат.

Кому нужен плагин WooCommerce Local to Global Attributes

Решение особенно актуально, если:

  • магазин давно работает на WooCommerce;
  • товары импортировали из другой системы;
  • атрибуты создавали вручную;
  • в каталоге много вариаций;
  • нужно унифицировать структуру каталога;
  • планируется доработка фильтрации;
  • требуется массовая миграция товаров.

Для небольшого каталога ручная работа ещё возможна.

Для сотен или тысяч товаров автоматизация заметно сокращает объём рутинных операций.

Важные ограничения и нюансы

Плагин решает конкретную задачу. Поэтому перед запуском нужно проверить структуру магазина.

Особенно важны:

Кириллица в названиях

Для русских атрибутов лучше заранее задать slug.

Например:

return [
    'Длина карниза' => 'dlina-karniza',
    'Цвет'          => 'color',
    'Материал'      => 'material',
];

Так проще контролировать технические имена.

Дубли значений

Плагин ищет существующий термин по названию.

Поэтому значения вроде:

Белый
белый
Белый

нужно предварительно проверить.

Кэш WooCommerce

После завершения плагин очищает связанные transient-кэши WooCommerce. Это помогает системе увидеть обновлённую структуру атрибутов.

При сложном магазине всё равно стоит дополнительно проверить страницу товара, вариации и фильтрацию.

Чек-лист перед миграцией

чек лист
чек лист

Перед запуском плагина WooCommerce Local to Global Attributes проверьте:

  • создана резервная копия БД;
  • выбран тестовый товар;
  • проверены локальные атрибуты;
  • проверены вариации;
  • подготовлена карта slug;
  • выполнен dry-run;
  • проверен лог;
  • запущена конвертация;
  • проверены товары после миграции;
  • проверены вариации;
  • проверены фильтры и поиск.

Такой порядок снижает риск проблем при массовой обработке.

Вывод

Плагин WooCommerce Local to Global Attributes автоматизирует перевод локальных атрибутов в глобальные. Он создаёт таксономии и термины, заменяет атрибуты товаров и обновляет мета-поля вариаций. Dry-run, пакетная обработка, AJAX-прогресс и лог делают процесс удобнее для больших каталогов.

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


Читайте также:

Приглашаем поучаствовать в обсуждении статьи:

Комментариев 0