Установите глобальные атрибуты при программном импорте продуктов в WooCommercePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Установите глобальные атрибуты при программном импорте продуктов в WooCommerce

Сообщение Anonymous »

Я импортирую продукты в WooCommerce программным способом, и мне нужно назначить глобальные атрибуты продуктам. Однако атрибуты всегда добавляются как пользовательские атрибуты продукта, а не как глобальные атрибуты, даже если имя и значение атрибута уже существуют в конфигурации глобальных атрибутов.
Глобальные атрибуты имеют решающее значение для моего Фильтры товаров работают корректно. Если я вручную отредактирую товар и нажму «Сохранить атрибуты», не внося никаких изменений, пользовательские атрибуты автоматически преобразуются в глобальные атрибуты. Однако у меня более 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();
При импорте Product. перед Нажмите на атрибут сохранения вручную
Глобально Добавлено уже в атрибуте
После сохранения
Полное видео
Полное видео
Полное видео
Полное видео
p>
Что я пробовал:
  • Убедиться, что имена атрибутов точно совпадают с уже определенными глобальными атрибутами.
  • Проверка того, созданы ли уже термины в глобальных атрибутах конфигурации.
Проблема:
  • Несмотря на это, атрибуты всегда добавляются как пользовательские. атрибуты.
  • Они становятся глобальными атрибутами только тогда, когда я вручную редактирую товар и нажимаю «Сохранить атрибуты».
Желаемое решение:
  • Мне нужен способ программного обеспечения что атрибуты добавляются как глобальные атрибуты во время процесса импорта.
Как я могу изменить свой код, чтобы сделать атрибуты глобальными по умолчанию?

Подробнее здесь: https://stackoverflow.com/questions/793 ... oocommerce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»