Как получить выбранную вариацию WooCommerce из объекта заказа
30 июн. 2019 г., 11:00:47
Просмотры: 14.2K
Голосов: 1
Я пытаюсь получить выбранную вариацию из заказа.
global $order;
$items = $order->get_items();
foreach( $items as $item ) {
$product_id = $item->get_product_id();
$product = wc_get_product( $product_id );
if( $product->is_type( 'variable' ) ) {
$variationName = $product->get_attribute( 'pa_my-custom-variation' );
}
}
Но этот код получает все возможные значения вариаций. Мне нужно получить только выбранную.

wpdev
549
Все ответы на вопрос
3
0
Ниже приведен код, соответствующий вашим требованиям
Для получения выбранных атрибутов вариации с использованием метода get_variation_attributes( ).
// Получаем экземпляр объекта WC_Order по ID заказа
$order = wc_get_order( $order_id );
// Перебираем "позиции" заказа
foreach( $order->get_items() as $item_id => $item ){
$product_id = $item->get_product_id(); // Получаем ID товара
$quantity = $item->get_quantity(); // Получаем количество товара
$product_name = $item->get_name(); // Получаем название товара
// Получаем экземпляр объекта WC_Product (может быть вариацией товара)
$product = $item->get_product();
// Получаем описание товара (работает и для вариаций)
$description = $product->get_description();
// Только для вариаций товара
if( $product->is_type('variation') ){
// Получаем атрибуты вариации
$variation_attributes = $product->get_variation_attributes();
// Перебираем каждый выбранный атрибут
foreach($variation_attributes as $attribute_taxonomy => $term_slug ){
// Получаем название атрибута товара или таксономии
$taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
// Название атрибута из метки товара
$attribute_name = wc_attribute_label( $taxonomy, $product );
// Название термина (или значение) этого атрибута
if( taxonomy_exists($taxonomy) ) {
$attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
} else {
$attribute_value =
$term_slug; // Для пользовательских атрибутов товара
}
}
}
}

HK89
716
31 дек. 2020 г. 04:24:37
0
Думаю, вам понадобится следующий код:
$get_order = wc_get_order( $order_id );
$items = $get_order->get_items();
foreach ( $items as $item ) {
$product = $item->get_product();
//проверяем, является ли это вариацией, используя is_type
if ( 'variation' === $product->get_type() ) {
$variation_id = $item->get_variation_id();
$variation = new WC_Product_Variation( $variation_id );
$attributes = $variation->get_attributes();
foreach ( $attributes as $key => $value ) {
if ( 'pa_my-custom-variation' === $key ) {
// здесь можно выполнить нужные действия
}
}
}
}
Этот код проверяет каждый товар в заказе, чтобы определить, является ли он вариативным. Если да, он получает ID вариации, а затем её атрибуты, после чего можно перебрать их, чтобы найти нужный.
Вот ещё один способ проверить, является ли товар вариативным. В этом случае мы получаем ID вариации, если он есть.
$variation_id = $item->get_variation_id();
if(! empty($variation_id) {
// товар является вариативным, и мы можем проверить его вариацию
}
Я знаю, что это старый вопрос, но надеюсь, это будет полезно для тех, кто сюда заглянет.

Ale
180
24 нояб. 2020 г. 15:14:24
Похожие вопросы
2
ответов
1
ответов