2
votes

I have an eCommerce website powered by WooCommerce. I'm using product variations to allow my customers to choose a specific configuration for their product.

I'm using the following code to list the terms names of a specific product attribute:

$available_pa_colors = wc_get_product_terms( $product->get_id(), 'pa_colors' );    

And it works great.

However when changing the default sort order from "Custom ordering" to "Term ID", I get nothing (no term names show up).

I did some research and it seems that wc_get_product_terms won't work with sorting.
How I can make this terms to get sorted by Term ID?

Any track on this will be appreciated.

1

1 Answers

4
votes

The function wc_get_product_terms() uses _wc_get_cached_product_terms() which prioritize stored cached data against the use of WordPress wp_get_post_terms() included in it.
That's why you can't sort anything.

So instead you should use directly wp_get_post_terms() which allows sorting like:

$available_pa_colors = wp_get_post_terms( $product->get_id(), 'pa_colors', array(
    'orderby' => 'term_id', 'order' => 'ASC', 'fields' => 'names'
) );

Tested and works.