Получение атрибутов простого товара в WooCommerce

12 апр. 2019 г., 18:12:17
Просмотры: 38.1K
Голосов: 2

Мне нужно получить атрибуты товара в WooCommerce для простого (Simple) товара. Некоторые атрибуты могут быть в виде выпадающего списка, но большинство опций представлены как радиокнопки.

Как я могу это сделать? Как это возможно?

С вариативными товарами у меня проблем нет, но для простых товаров я не могу получить атрибуты.

0
Все ответы на вопрос 2
2

Вы будете использовать метод WC_Product под названием get_attributes(), который возвращает массив вида:

global $product;

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Получаем объект WC_Product
}

$product_attributes = $product->get_attributes(); // Получаем атрибуты товара

// Сырой вывод
echo '<pre>'; print_r( $product_attributes ); echo '</pre>';

Это должно работать (для реальных атрибутов товара).


Теперь, если вы используете сторонние плагины, например, такие как "Product Add-Ons", они добавляют свои собственные поля к товару, но они не являются атрибутами товара...

12 апр. 2019 г. 18:17:39
Комментарии

Это не работает.

abu abu abu abu
24 окт. 2020 г. 06:06:32

Этот код получает массив всех атрибутов, который можно использовать для получения отдельного атрибута, заменив print_r($product_attributes) на что-то вроде print_r($product_attributes['pa_color']). Однако это возвращает только ID термина, поэтому потребуются дополнительные действия для получения названия термина по этому ID.

Nathan Nathan
25 окт. 2021 г. 19:06:00
0

Развивая ответ Loic для атрибута pa_manufacturer:

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Получаем объект WC_Product
}

$product_attributes = $product->get_attributes(); // Получаем атрибуты товара

// Вывод
$manufacturer_id = $product_attributes['pa_manufacturer']['options']['0']; // возвращает ID термина
$manufacturer_name = get_term( $manufacturer_id )->name; // получает название термина по ID
echo '<p class="manufacturer">'.$manufacturer_name.'</p>'; // отображаем фактическое название термина
25 окт. 2021 г. 19:10:46