Reputation: 1429
I'm using wordpress, want first-level taxonomy terms to be ordered by name but below code is not giving me desired result. Here is my code:
$args = array(
'taxonomy' => 'tax-category',
'hide_empty' => 0,
'hierarchical' => 1,
'parent' => 0,
'orderby'=>'name',
'order' => 'DESC',
'fields' => 'all',
);
$rs_terms = get_terms('tax-category', $args);
When I'm adding below php sorting, it works perfectly. But want to know why wordpress's default sorting is not working properly:
usort($rs_terms, function($a, $b){
return strcmp($a->name, $b->name);
});
Upvotes: 8
Views: 17319
Reputation: 555
Same issue here, I confirm what Cory was mentioning, the Category Order and Taxonomy Terms Order does change the search order. I was able to work around with removing the plugin filter just for my request with the code below.
remove_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);
//do your stuff here...
add_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);
Upvotes: 1
Reputation: 1436
Try with wpdb
<?php
global $wpdb;
$rs_terms = $wpdb->get_results( "
SELECT
t.*
FROM
{$wpdb->prefix}term_taxonomy AS tt
INNER JOIN
{$wpdb->prefix}terms AS t
ON t.term_id = tt.term_id
WHERE
tt.taxonomy = 'tax-category'
AND tt.parent = '0'
ORDER BY
t.name DESC
" );
?>
Upvotes: 0
Reputation: 171
Showed up here with the same problem, and like others mentioned, the culprit was a plugin related to taxonomy sorting. Category Order and Taxonomy Terms Order, in my case. I deactivated it, and my terms list popped into order.
Upvotes: 17
Reputation: 1240
I had the same problem. I was using the plugin Intuitive Custom Post Order that does ordering by drag and drop in WordPress admin panel. This was overriding my "orderby" in get_terms(), so I changed ordering from admin panel. If you use any similar plugin it maybe overrides the "orderby".
Upvotes: 0
Reputation: 1
You may also check your PHP modules installed. Assuming you're on PHP 7.x, make sure no APC or APCu modules are loaded.
php -m | grep -i apc
Should come with no output.
Upvotes: 0
Reputation: 1056
Your code should work fine. I had for same problem and I found a hook in my plugin that changed 'orderby' value. It might be the same case.
I suggest you look for a filter function hooked to get_terms() in your plugin/theme.
Possible hooks:
EDIT: Before you go scanning the hooks you should try adding 'menu_order' => false
to your args, it might do the job for you. There are taxonomies with manual drag&drop sorting (menu_order), so you just need to unable it.
Upvotes: 4
Reputation: 590
I just tested your code on my localhost and it works.
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'fields' => 'all',
'parent' => 0,
'hierarchical' => true,
'child_of' => 0,
'childless' => false,
'pad_counts' => false,
'cache_domain' => 'core'
Upvotes: 3