web-dev-qa-db-fra.com

wp_list_categories: ordre par terme?

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 :)

4
digifrog

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

3
birgire