Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Woocommerce variation attributes

I am trying to get variations of a variable product on custom product page. I have two attributes, one for sizes as select and the other for colors as swatches. The problem that I cannot display the attribute that I need to display, and when I use the following code it returns a text names of sizes or colors not the select dropdown for sizes or the colors swatches. Any help please ?!

echo implode(', ', wc_get_product_terms( $product_id, 'pa_colors' )); 
like image 323
Shehab Eltawel Avatar asked Aug 16 '17 13:08

Shehab Eltawel


1 Answers

This is a brief code to solve your question, I let you entire code, you can use only that you need.

The first is check if get_product function exists, and check the product type, to create a correct product object with the id (in my case $idProduct).

It work on woocommerce 3.x, I don't test it on 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 );
        }
    }

Also you try with:

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

where $key can be pa_color , pa_size, etc

I hope help you.

like image 61
Jose Carlos Ramos Carmenates Avatar answered Oct 20 '22 08:10

Jose Carlos Ramos Carmenates