clueless
clueless

Reputation: 869

woocommerce get list of attribute values

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.

Upvotes: 19

Views: 98719

Answers (5)

Bas van Dijk
Bas van Dijk

Reputation: 865

If you wanted to retrieve all of the values for every wc taxonomy.

You could use the function: wc_get_attribute_taxonomies(). This will return an array like:

[
  "id:24" => {
    "attribute_id": "24"
    "attribute_name": "bending-lines"
    "attribute_label": "Bending lines"
    "attribute_type": "select"
    "attribute_orderby": "menu_order"
    "attribute_public": "0"
  }
]

Then you could use the function get_terms() to retrieve the values per taxonomy.

Upvotes: 2

Steven Jones
Steven Jones

Reputation: 694

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.

Upvotes: 25

user5029040
user5029040

Reputation: 79

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,

Upvotes: 7

Arif
Arif

Reputation: 89

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();

Upvotes: 6

runningonplants
runningonplants

Reputation: 449

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

Upvotes: 18

Related Questions