Получение атрибутов простого товара в WooCommerce
Мне нужно получить атрибуты товара в WooCommerce для простого (Simple) товара. Некоторые атрибуты могут быть в виде выпадающего списка, но большинство опций представлены как радиокнопки.
Как я могу это сделать? Как это возможно?
С вариативными товарами у меня проблем нет, но для простых товаров я не могу получить атрибуты.
Вы будете использовать метод 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", они добавляют свои собственные поля к товару, но они не являются атрибутами товара...

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

Развивая ответ 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>'; // отображаем фактическое название термина
