J'utilise actuellement la fonction wp_list_categories
de WordPress afin de récupérer mes termes à partir d'une taxonomie spécifiée. J'aime cette fonction pour sa capacité à générer des listes HTML (hiérarchiques), équipées de noms de classes appropriés, etc.
J'ai trié mes termes en utilisant le plugin Simple Custom Post Order , qui fonctionne correctement lorsque je liste tous les termes de la manière habituelle (c'est-à-dire en utilisant get_terms).
Cependant, chaque fois que j'essaie de lister mes termes en utilisant wp_list_categories
, il n'accepte généralement pas l'argument "orderby" lors de l'utilisation de "term_order" (ou "menu_order").
Quelqu'un pourrait-il me diriger dans la bonne direction ici?
J'ai fourni mon code ci-dessous:
$categories = wp_list_categories([
'taxonomy' => 'news_category',
'title_li' => '',
'orderby' => 'menu_order',
'order' => 'ASC',
'echo' => 0,
'current_category' => $current_term_id,
'depth' => 0
]);
Edit: J'ai utilisé menu_order
, alors que j'aurais dû utiliser term_order
. Néanmoins, j'espère que cela servira quelqu'un, un jour :)
La fonction wp_list_categories()
appelle la fonction get_categories()
, qui est un wrapper pour la fonction get_terms()
, qui crée une instance de la classe WP_Term_Query
. Il ne semble pas que cela prenne en charge la commande par term order .
Si le plug-in utilise la colonne term_order
dans la table wp_terms
, vous pouvez essayer d'ajouter un support pour sa commande, via le filtre get_terms_orderby
:
add_filter( 'get_terms_orderby', function( $orderby, $qv, $taxonomy )
{
// Only target the category taxonomy
if( 'category' !== $taxonomy )
return $orderby;
// Support orderby term_order
if( isset( $qv['orderby'] ) && 'term_order' === $qv['orderby'] )
$orderby = 't.term_order';
return $orderby;
}, 10, 3 );
où nous ne supportons cela que pour la taxonomie category
.
Une autre approche consiste à ajouter le filtre et à le supprimer juste après votre appel wp_list_categories()
.