Come ottenere la variazione selezionata di WooCommerce dall'oggetto ordine

30 giu 2019, 11:00:47
Visualizzazioni: 14.2K
Voti: 1

Sto cercando di ottenere la variazione selezionata dall'ordine.

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' );
    }
}

Ma questo ottiene tutti i valori delle variazioni. Voglio ottenere solo quella selezionata.

0
Tutte le risposte alla domanda 3
0

Segui il codice qui sotto secondo le tue esigenze

Per ottenere gli attributi della variazione selezionata utilizzando il metodo get_variation_attributes( ).

// Ottieni un'istanza dell'oggetto WC_Order da un ID ordine
$order = wc_get_order( $order_id );

// Scorri gli "elementi" dell'ordine
foreach( $order->get_items() as $item_id => $item ){
    $product_id   = $item->get_product_id(); //Ottieni l'ID del prodotto
    $quantity     = $item->get_quantity(); //Ottieni la quantità del prodotto
    $product_name = $item->get_name(); //Ottieni il nome del prodotto

     // Ottieni un'istanza dell'oggetto WC_Product (può essere anche una variazione di prodotto)
    $product      = $item->get_product();

     // Ottieni la descrizione del prodotto (funziona anche per le variazioni di prodotto)
    $description  = $product->get_description();

    // Solo per variazioni di prodotto
    if( $product->is_type('variation') ){
         // Ottieni gli attributi della variazione
        $variation_attributes = $product->get_variation_attributes();
        // Scorri ogni attributo selezionato
        foreach($variation_attributes as $attribute_taxonomy => $term_slug ){
            // Ottieni il nome dell'attributo del prodotto o la tassonomia
            $taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
            // Il nome dell'etichetta dall'attributo del prodotto
            $attribute_name = wc_attribute_label( $taxonomy, $product );
            // Il nome del termine (o valore) da questo attributo
            if( taxonomy_exists($taxonomy) ) {
                $attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
            } else {
                $attribute_value = 
   $term_slug; // Per attributi personalizzati del prodotto
            }
        }
    }
   }
31 dic 2020 04:24:37
0

Penso che ciò di cui hai bisogno sia il seguente codice:

    $get_order = wc_get_order( $order_id );
    $items     = $get_order->get_items();

    foreach ( $items as $item ) {
        $product      = $item->get_product();
        //verifica se si tratta di una variazione usando 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 ) {
                    // qui puoi fare ciò che vuoi
                }
            }
        }
    }

Questo codice esamina ogni elemento dell'ordine e verifica se si tratta di una variazione. Se lo è, ottiene l'ID della variazione e da lì recupera gli attributi della variazione, permettendoti di scorrere ciascuno di essi per trovare quello che ti serve.

Ecco anche un altro modo per verificare se un elemento è variabile. In questo modo ottieni l'ID della variazione se presente.

$variation_id = $item->get_variation_id();
if(! empty($variation_id) {
// l'elemento è variabile e possiamo controllare la sua variazione
}

So che è una domanda vecchia, ma spero che questo possa essere utile per chiunque capiti qui.

24 nov 2020 15:14:24
1

Perché get_attribute()? Forse stai cercando get_title()? Questo recupererebbe il nome della variante.

30 giu 2019 19:10:50
Commenti

Non capisco. Come posso usare get_title per la variante?

wpdev wpdev
30 giu 2019 22:03:29