• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как перевести значения из раздела Доставка в Атрибуты?

Тестировщик

Новичок
Задача такая: имею значения высоты, длины, ширины и веса в разделе Доставка у каждого товара. Эти значения необходимо вывести в карточку не просто, а именно через атрибуты. Т.е. необходимо продублировать их в атрибуты. Как это сделать, не очень понимаю. Переносить каждый товар из 50 тысячного ассортимента - что-то на нереальном
Вариант вывода именно из раздела доставка напрямую в карточку таким образом:
PHP:
if( $product->get_height() && $product->get_width() && $product->get_length() ) {
        echo '<p><strong>Высота:</strong> ' . $product->get_height() . 'см';
Не подходит
Вариант эскпортировать все товары, переделать, а потом импортировать, - тоже не подходит. Ибо нет плагинов All Export и All Import (тут не от меня зависит)
Подскажите, пожалуйста, есть ли какой-то вариант переноса данных в атрибуты?
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    19.1 KB · Просмотры: 1

joy66

Опытный
Непонятно зачем усложнять себе жизнь не используя плагины Импорта-Экспорта. При таком количестве товаров, это просто необходимо.
Понятно, что не всегда есть возможность приобрести полные лицензии. Ну так никто и не заставляет это делать).
Какое решение вы ждете?
Навык программирования в php для woo имеется?
вот примерный код скрипта, который надо один раз запустить на сервере из каталога wordpress

Код:
<?php
// Подключаем файл wp-load.php
require_once('wp-load.php');

// Получаем все простые товары
$args = array(
    'post_type' => 'product',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => '_product_type',
            'value' => 'simple',
        ),
    ),
);

$products = new WP_Query($args);

if ($products->have_posts()) {
    while ($products->have_posts()) {
        $products->the_post();
        $product_id = get_the_ID();
        $product = wc_get_product($product_id);

        // Получаем значения высоты, длины, ширины и веса товара
        $height = $product->get_height();
        $length = $product->get_length();
        $width = $product->get_width();
        $weight = $product->get_weight();

        // Добавляем атрибуты
        $attributes = array(
            'Height' => $height,
            'Length' => $length,
            'Width' => $width,
            'Weight' => $weight
        );

        foreach ($attributes as $attribute_name => $attribute_value) {
            // Создаем или обновляем атрибут
            $attribute = wc_get_attribute($attribute_name);

            if (!$attribute) {
                $attribute_id = wc_create_attribute([
                    'name' => $attribute_name,
                    'slug' => sanitize_title($attribute_name),
                    'type' => 'text',
                ]);
            } else {
                $attribute_id = $attribute->get_id();
            }

            // Привязываем атрибут к товару
            wp_set_object_terms($product_id, $attribute_id, 'pa_' . sanitize_title($attribute_name), true);

            // Добавляем значение атрибута для товара
            update_post_meta($product_id, '_product_attributes', [
                'pa_' . sanitize_title($attribute_name) => [
                    'name' => 'pa_' . sanitize_title($attribute_name),
                    'value' => $attribute_value,
                    'position' => 0,
                    'is_visible' => 1,
                    'is_variation' => 0,
                    'is_taxonomy' => 0
                ]
            ]);
        }
    }
}

wp_reset_postdata();
?>
 
Сверху Снизу