wp query – Get product_cat terms in the order I set them in Admin area
I want to get an array of the terms (categories) of WC products. But I want to get them in the same order I ordered them in the Admin area, that is in Products > Categories
…
So, at first I wrote this piece of code and expected it to work:
$categories = get_terms(array(
'taxonomy' => 'product_cat',
'orderby' => 'term_order',
'order' => 'ASC',
));
Then I noticed in the manual that:
‘orderby’
(string) Field(s) to order terms by. Accepts:
- term fields (‘name’, ‘slug’, ‘term_group’, ‘term_id’, ‘id’, ‘description’, ‘parent’, ‘term_order’). Unless $object_ids is not
empty, ‘term_order’ is treated the same as ‘term_id’.
So I edited the code above to:
$categories = get_terms(array(
'taxonomy' => 'product_cat',
'object_ids' => get_terms(array(
'taxonomy' => 'product_cat',
'fields' => 'ids',
)),
'orderby' => 'term_order',
'order' => 'ASC',
));
but this time I get an empty array…
So after even more careful reading I noticed that the bold part of the quote in the manual refers to $object_ids
which are obviously different than $term_ids
. In fact $object_ids
exist as a column (object_id
) in wp_term_relationships
table and their value is totally different from the next column in the table (term_taxonomy_id
)… So what’s the story here?
How do I get the $object_ids of the terms I’m interested in, in an ordered way? This gets more complicated than I originally anticipated, and it gets frustrating too, because googling the keywords get_terms term_order
returns a whole bunch of results on this and other websites, where none of the proposed solutions seem to work. Some of them mention the use of a filter to get_terms_orderby
, to forcefully instruct WP to use the desired ordering param, etc…
So, anyone figured this out? TIA.
Leave an answer