Obtener atributos de variación de Woocommerce

1 minuto de lectura

avatar de usuario
Shehab Eltawel

Estoy tratando de obtener variaciones de un producto variable en la página de productos personalizados. Tengo dos atributos, uno para tamaños seleccionados y otro para colores como muestras. El problema es que no puedo mostrar el atributo que necesito mostrar, y cuando uso el siguiente código, devuelve nombres de texto de tamaños o colores, no el menú desplegable de selección para tamaños o muestras de colores. ¿Alguna ayuda por favor?

echo implode(', ', wc_get_product_terms( $product_id, 'pa_colors' )); 

avatar de usuario
José Carlos Ramos Carmenates

Este es un breve código para resolver tu pregunta, te dejo el código completo, puedes usar solo el que necesites.

La primera es comprobar si get_product existe la función, y verifique el tipo de producto, para crear un objeto de producto correcto con la identificación (en mi caso $idProduct).

Funciona en woocommerce 3.x, no lo pruebo en woocommerce <3.x.

if( function_exists('get_product') ) {
        $product = get_product( $idProduct );
        if ( $product->is_type( 'variable' ) ) {

            $product = new WC_Product_Variable( $idProduct );

            $available_variations = $product->get_available_variations(); //get all child variations
            $variation_variations = $product- >get_variation_attributes(); // get all attributes by variations

            // taxonomy           => terms
            // pa_attribute-color => array('blue', 'red', green)
            // Use ex: get_taxonomy('pa_attribute-color')->labels; to get the Name and not the slug to attributes, it can be the taxonomy
            // Use ex: get_term_by('name', 'pa_attribute-color', 'pa_attribute-color); to get the Name/label 

            $result = array( $available_variations , $attributes);  // only to see the result you can use var_dump, error_log, etc.
            //...
            //... 
        }elseif ( $product->is_type( 'bundle' ) && class_exists( 'WC_Product_Bundle' ) ) {
            $product = new WC_Product_Bundle( $idProduct );
        }else{
            $product = new WC_Product( $idProduct );
        }
    }

También intentas con:

$product->get_attribute( $key );
wc_attribute_label($key);

dónde $key puede ser pa_color , pa_tallaetc

Espero ayudarte.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad