Cum să obții variația selectată WooCommerce din obiectul comenzii

30 iun. 2019, 11:00:47
Vizualizări: 14.2K
Voturi: 1

Î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ă.

0
Toate răspunsurile la întrebare 3
0

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
            }
        }
    }
}
31 dec. 2020 04:24:37
0

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.

24 nov. 2020 15:14:24
1

De ce get_attribute()? Poate căutați get_title()? Aceasta ar prelua numele variantei.

30 iun. 2019 19:10:50
Comentarii

Nu înțeleg. Cum pot folosi get_title pentru variație?

wpdev wpdev
30 iun. 2019 22:03:29