Cum să obții variația selectată WooCommerce din obiectul comenzii
Încerc să obțin variația selectată dintr-o comandă.
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' );
}
}
Dar acest cod obține toate valorile de variație. Vreau să obțin doar cea selectată.

Mai jos găsiți codul adaptat conform nevoilor dumneavoastră
Pentru a obține atributele variației selectate folosind metoda get_variation_attributes( ).
// Obține o instanță a obiectului WC_Order dintr-un ID de comandă
$order = wc_get_order( $order_id );
// Parcurge "elementele liniei" comenzii
foreach( $order->get_items() as $item_id => $item ){
$product_id = $item->get_product_id(); //Obține ID-ul produsului
$quantity = $item->get_quantity(); //Obține cantitatea produsului
$product_name = $item->get_name(); //Obține numele produsului
// Obține o instanță a obiectului WC_Product (poate fi și o variație de produs)
$product = $item->get_product();
// Obține descrierea produsului (funcționează și pentru variații)
$description = $product->get_description();
// Doar pentru variații de produs
if( $product->is_type('variation') ){
// Obține atributele variației
$variation_attributes = $product->get_variation_attributes();
// Parcurge fiecare atribut selectat
foreach($variation_attributes as $attribute_taxonomy => $term_slug ){
// Obține numele atributului sau taxonomia produsului
$taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
// Numele etichetei din atributul produsului
$attribute_name = wc_attribute_label( $taxonomy, $product );
// Numele termenului (sau valoarea) din acest atribut
if( taxonomy_exists($taxonomy) ) {
$attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
} else {
$attribute_value = $term_slug; // Pentru atribute personalizate ale produsului
}
}
}
}

Ceea ce ai nevoie, cred, este următorul cod:
$get_order = wc_get_order( $order_id );
$items = $get_order->get_items();
foreach ( $items as $item ) {
$product = $item->get_product();
//verifică dacă acesta este o variație folosind 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 ) {
// orice dorești să faci în continuare
}
}
}
}
Ce face acest cod este să examineze fiecare articol din comandă și să verifice dacă este unul variabil. Dacă este, atunci va obține ID-ul variației și de acolo va obține atributele variației, iar tu poți parcurge fiecare dintre ele pentru a găsi cel de care ai nevoie.
Iată și o altă modalitate de a verifica dacă un articol este variabil. În acest fel, obții ID-ul variației dacă există unul.
$variation_id = $item->get_variation_id();
if(! empty($variation_id) {
// articolul este variabil și putem verifica variația sa
}
Știu că aceasta este o întrebare veche, dar sper că acest lucru ar putea fi util pentru oricine ajunge aici.
