web-dev-qa-db-fra.com

Tri des catégories

J'utilise le code ci-dessous pour cracher des types de messages personnalisés avec leurs catégories, donc

Catégorie 1 --- poste 1 --- poste 2

Catégorie 2 --- poste 1 --- poste 2 --- poste 3 etc.

Cela fonctionne bien pour moi, mais j'aimerais pouvoir trier mes catégories par nombre afin que orderby = count afin que les catégories avec un plus grand nombre de publications soient placées en haut de la liste pour le moment, cela ne fonctionne pas dans mon code ci-dessous, aucune idée pourquoi?

Merci beaucoup pour l'aide

 <?php

// List posts by the terms for a custom taxonomy of any post type

$post_type = 'our_drinks';
$tax = ('our-drinks');
$tax_terms = get_terms( $tax, 'orderby=count&order=ASC&hide_empty=0&hierarchical=true');
if ($tax_terms) {
    foreach ($tax_terms  as $tax_term) {
    $args = array(
        'post_type' => $post_type,
        "$tax" => $tax_term->slug,
        'post_status' => 'publish',
        'order' => 'ASC',
        'posts_per_page' => -1,
        'caller_get_posts'=> 1
    );

        $my_query = null;
        $my_query = new WP_Query($args);

        if( $my_query->have_posts() ) : ?>


                     <div class="category_title">

                                <?php echo $tax_term->name; ?>

                        </div>
             <?php while ( $my_query->have_posts() ) : $my_query->the_post();  ?>


                                        LOOP CONTENT GOES HERE



                        <?php endwhile; ?>  

                  v<?php else : ?>
        <?php endif; // if have_posts()
        wp_reset_query();

    } // end foreach #tax_terms
}
?>
1
jmysona

Vous avez orderby=count, ce qui devrait être correct , mais vous avez aussi order=asc. order=ASC signifie "du plus petit au plus grand", au moins avec des chiffres. Vous voulez le contraire, "du plus grand au plus petit". Utilisez order=DESC à la place. Je soupçonne que get_terms fonctionne, vous venez de lui dire quelque chose de différent que vous voulez réellement.

En outre, vous avez plusieurs requêtes dans une boucle et aucune limite réelle. Cela pourrait entraîner un grand nombre de requêtes de base de données et avoir un impact notable sur les performances du serveur. Être conscient.

1
s_ha_dum

Puisque tu ne dis pas que "ça ne marche pas", je vais aborder tous les problèmes auxquels je peux penser maintenant.

  1. Mettez dans votre argument register_taxonomy de fonction query_var => 'our-drinks', si vous n'en avez pas déjà un.
  2. Si cela ne fonctionne pas ou si vous l'avez déjà, modifiez les arguments dans la requête $my_query en:

    $args = array(
            'post_type' => $post_type,
            'tax_query' => array(
                array(
                    'taxonomy' => $tax,
                    'field' => 'slug',
                    'terms' => $tax_term->slug,
                ),
            ),
            'post_status' => 'publish',
            'order' => 'ASC',
            'posts_per_page' => -1,
            'caller_get_posts'=> 1
    );
    

    puisque votre façon de faire est quelque peu obsolète. Vous trouverez des détails sur tax_queryici . Remarquez les tableaux imbriqués - ce n'est pas un bug :)

0
ceruleus