Глобальные атрибуты имеют решающее значение для моего Фильтры товаров работают корректно. Если я вручную отредактирую товар и нажму «Сохранить атрибуты», не внося никаких изменений, пользовательские атрибуты автоматически преобразуются в глобальные атрибуты. Однако у меня более 14 000 продуктов, поэтому обновление вручную невозможно.
Я хочу, чтобы атрибуты по умолчанию назначались как глобальные в процессе импорта.
Вот код, который я использую для импорта продуктов и установки атрибутов:
Код: Выделить всё
$product_data = [
'regular_price' => $row[15] ?? '',
'sku' => $row[1],
'category' => $diamond_type,
'attributes' => [
'Lab' => $row[2] ?? '',
'Certificate No' => $row[3] ?? '',
'Shape' => $row[4] ?? '',
'Carat' => $row[5] ?? '',
'Tinge' => $row[21] ?? '',
],
'video_url' => $row[22] ?? '',
'certificate_url' => $row[23] ?? '',
'image_url' => $row[24] ?? '',
];
function spi_create_attributes_array($attributes)
{
$attribute_objects = [];
foreach ($attributes as $name => $value) {
if (!$value) continue; // Skip empty attributes
// Convert attribute name to global taxonomy (e.g., pa_color)
$taxonomy = 'pa_' . sanitize_title($name);
// Check if the taxonomy exists, create it if it doesn't
if (!taxonomy_exists($taxonomy)) {
$attribute_data = [
'name' => $name,
'slug' => sanitize_title($name),
'type' => 'select',
'order_by' => 'menu_order',
'has_archives' => false,
];
wc_create_attribute($attribute_data);
register_taxonomy(
$taxonomy,
'product',
['hierarchical' => false, 'show_ui' => false]
);
}
// Add the term to the global attribute taxonomy if it doesn't exist
if (!term_exists($value, $taxonomy)) {
wp_insert_term($value, $taxonomy);
}
// Get the term ID for the value
$term = get_term_by('name', $value, $taxonomy);
if ($term) {
$attribute = new WC_Product_Attribute();
$attribute->set_name($taxonomy);
$attribute->set_options([$term->name]);
$attribute->set_visible(true);
$attribute->set_variation(false);
$attribute_objects[] = $attribute;
}
}
return $attribute_objects;
}
$product = new WC_Product_Simple();
$attributes = spi_create_attributes_array($product_data['attributes']);
$product->set_attributes($attributes);
$product->save();
Глобально Добавлено уже в атрибуте
После сохранения
Полное видео
Полное видео
Полное видео
Полное видео
p>
Что я пробовал:
- Убедиться, что имена атрибутов точно совпадают с уже определенными глобальными атрибутами.
- Проверка того, созданы ли уже термины в глобальных атрибутах конфигурации.
- Несмотря на это, атрибуты всегда добавляются как пользовательские. атрибуты.
- Они становятся глобальными атрибутами только тогда, когда я вручную редактирую товар и нажимаю «Сохранить атрибуты».
- Мне нужен способ программного обеспечения что атрибуты добавляются как глобальные атрибуты во время процесса импорта.
Подробнее здесь: https://stackoverflow.com/questions/793 ... oocommerce
Мобильная версия