Trier les résultats par nom et ordre asc sur Archive.php

15

J'utilise actuellement le code suivant pour répertorier les publications dans Archive.php mais je veux que les résultats soient classés par nom dans l'ordre croissant, j'ai vérifié le codex mais la réponse n'est pas claire pour moi, comment puis-je faire en sorte que cela fonctionne?

<?php $post = $posts[0]; // ?>

Merci d'avance.

Dave Burns
la source
si vous utilisez une requête personnalisée dans votre archive.php, pouvez-vous l'afficher? peut être publier le archive.php complet sur pastie.org et mettre à jour votre réponse avec le lien?
Hameedullah Khan

Réponses:

36

La façon la plus simple de procéder consiste à utiliser un crochet (le pre_get_postscrochet) pour modifier l'ordre. Mais vous devez vérifier que la requête est celle pour laquelle vous souhaitez modifier la commande! ( is_archive()ou is_post_type_archive()devrait être suffisant.)

Par exemple, mettez ce qui suit dans les fonctions de votre thème.php ...

add_action( 'pre_get_posts', 'my_change_sort_order'); 
    function my_change_sort_order($query){
        if(is_archive()):
         //If you wanted it for the archive of a custom post type use: is_post_type_archive( $post_type )
           //Set the order ASC or DESC
           $query->set( 'order', 'ASC' );
           //Set the orderby
           $query->set( 'orderby', 'title' );
        endif;    
    };
Stephen Harris
la source
Bonjour, pourrez-vous montrer comment fonctionne la commande par défaut? Quelques liens si possible .Merci
Latheesh VM Villa
@LatheeshVMVilla WP est développé comme un blog, donc l'ordre sensible / par défaut se fait par post_date DESC (= décroissant), c'est donc le plus récent-post-premier. Si vous utilisez WP pour quelque chose où le temps est moins pertinent (la plupart des types de listes, comme votre collection d'enregistrements, des recettes, un glossaire, ...), vous voudrez souvent commander un ASC post-titre (= croissant, donc alphabétique par titre avec des chiffres précédant les lettres).
user3445853
Merci. Fonctionne bien pour ma page d'archive de taxonomie.
Sema Hernández
1
<?php
// we add this, to show all posts in our
// Glossary sorted alphabetically
if ( is_category('Glossary') )  {
    $args = array( 
        'posts_per_page' => -1, 
        'orderby'        => 'title', 
        'order'          => 'ASC' 
    );
    $glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
Abdelfattah Saied Baraka
la source
1
Pouvez-vous expliquer pourquoi cela aide le PO? Veuillez toujours ajouter une explication au-dessus d'un morceau de code. Merci.
kaiser
La question était Trier les résultats par nom et ordre asc sur Archive.php. Vraisemblablement selon le répondeur, ce code triera les résultats par nom et ordre asc sur Archive.php?
Jon
0

suite à la réponse de Stephen, si vous souhaitez simplement interroger et trier par titre, vous pouvez utiliser ceci dans votre fichier modèle:

$args = ( array(
'order' => 'ASC',
'orderby' => 'title',
 ) );

query_posts($args);
Josh
la source
5
Directement à partir de la référence du code WordPress - "Cette fonction remplacera complètement la requête principale et n'est pas destinée à être utilisée par des plugins ou des thèmes. Son approche trop simpliste de la modification de la requête principale peut être problématique et doit être évitée autant que possible. Dans la plupart Dans ce cas, il existe des options meilleures et plus performantes pour modifier la requête principale, par exemple via l'action "pre_get_posts" dans WP_Query. " En résumé, @Stephen Harris a la bonne façon d'y parvenir. developer.wordpress.org/reference/functions/query_posts
Michael