Cómo obtener la variación seleccionada de WooCommerce desde el objeto de pedido

30 jun 2019, 11:00:47
Vistas: 14.2K
Votos: 1

Estoy intentando obtener la variación seleccionada de un pedido.

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

Pero esto obtiene todos los valores de variación. Yo quiero obtener solo el seleccionado.

0
Todas las respuestas a la pregunta 3
0

A continuación, el código adaptado según tus necesidades

Para obtener los atributos de variación seleccionados usando el método get_variation_attributes( ).

// Obtener una instancia del objeto WC_Order desde un ID de pedido
 $order = wc_get_order( $order_id ); 

// Recorrer los "elementos" del pedido
foreach( $order->get_items() as $item_id => $item ){
    $product_id   = $item->get_product_id(); //Obtener el ID del producto
    $quantity     = $item->get_quantity(); //Obtener la cantidad del producto
    $product_name = $item->get_name(); //Obtener el nombre del producto

     // Obtener una instancia del objeto WC_Product (puede ser una variación de producto también)
    $product      = $item->get_product();

     // Obtener la descripción del producto (funciona también para variaciones de producto)
    $description  = $product->get_description();

    // Solo para variaciones de producto
    if( $product->is_type('variation') ){
         // Obtener los atributos de la variación
        $variation_attributes = $product->get_variation_attributes();
        // Recorrer cada atributo seleccionado
        foreach($variation_attributes as $attribute_taxonomy => $term_slug ){
            // Obtener el nombre del atributo del producto o la taxonomía
            $taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
            // El nombre de la etiqueta del atributo del producto
            $attribute_name = wc_attribute_label( $taxonomy, $product );
            // El nombre del término (o valor) de este atributo
            if( taxonomy_exists($taxonomy) ) {
                $attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
            } else {
                $attribute_value = 
   $term_slug; // Para atributos personalizados de producto
            }
        }
    }
   }
31 dic 2020 04:24:37
0

Lo que necesitas creo que es el siguiente código:

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

    foreach ( $items as $item ) {
        $product      = $item->get_product();
        //verificar si es una variación 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 ) {
                    // lo que quieras hacer a continuación
                }
            }
        }
    }

Lo que hace es revisar cada artículo del pedido y verificar si es realmente una variación. Si lo es, obtendrá su ID de variación y desde ahí obtendrá los atributos de la variación y podrás iterar a través de cada uno de ellos para encontrar el que necesitas.

Aquí hay otra forma de verificar si un artículo es variable. De esta manera obtienes el ID de variación si existe uno.

$variation_id = $item->get_variation_id();
if(! empty($variation_id) {
// el artículo es variable y podemos verificar su variación
}

Sé que esta es una pregunta antigua pero espero que esto pueda ser útil para cualquiera que llegue aquí.

24 nov 2020 15:14:24
1

¿Por qué get_attribute()? Tal vez estás buscando get_title()? Esto recuperaría el nombre de la variación.

30 jun 2019 19:10:50
Comentarios

No entiendo. ¿Cómo puedo usar get_title para variaciones?

wpdev wpdev
30 jun 2019 22:03:29