13
votes

I'm using woocommerce on wordpress to create a simple shop site and I've added a couple attributes to a product. These are namely, size and color. Under size I have a variety of values including Small, Medium and Large. Same with color ie. Red, Blue, Green.

What I want to do is show these values in a dropdown. Basically just list them out so I can use the values as filters for the shop catalog page.

Any help would be great.

EDIT: I've delved into the woocommerce code and api docs and only found this code to pull the attributes.

global $woocommerce;

$attr_tax = $woocommerce->get_attribute_taxonomy_names();

foreach( $attr_tax as $tax ) {
     echo $woocommerce->attribute_taxonomy_name( $tax->attribute_name );
}

What this snippet gives me are the taxonomy slugs only, ie. pa_size and pa_color. I'm very new to woocommerce, but a search in there api docs reveals nothing about how to pull the values of these attributes.

4
Have you made any attempt to do this at all?Mike Brant
Of course, I'm sorry. I forgot to post my code.clueless
There is a much simpler way then to use code to do what you want. A woocommerce product can be a variable product and from there you can set the fields you want to have as a variable. Here is a link to some documentation for it: docs.woocommerce.com/document/variable-productIroner100

4 Answers

20
votes

You can use get_terms() https://developer.wordpress.org/reference/functions/get_terms/

If you pass in pa_size or pa_color you will get back a list of terms in that taxonomy.

17
votes

Hoping this is helpful to someone:

global $product; 

// Get product attributes
$attributes = $product->get_attributes();

if ( ! $attributes ) {
    echo "No attributes";
}

foreach ( $attributes as $attribute ) {

        echo $attribute['name'] . ": ";
        $product_attributes = array();
        $product_attributes = explode('|',$attribute['value']);

        $attributes_dropdown = '<select>';

        foreach ( $product_attributes as $pa ) {
            $attributes_dropdown .= '<option value="' . $pa . '">' . $pa . '</option>';
        }

        $attributes_dropdown .= '</select>';

        echo $attributes_dropdown;
}
7
votes

This post was written some time ago so I don't know if Woocommerce had this method in its previous incarnations.
For anyone else looking to do this, this line is all you need.

$product->list_attributes();

This allows you to customize the order and toggle whether or not you want to display the variation in the backend,

4
votes

In addition to @user5029040 answer, which outputs html, if you want to get an array you can use the following function.

$product->get_variation_attributes();