web-dev-qa-db-fra.com

Triez les résultats par nom et ordre ascendant sur Archive.php

J'utilise actuellement le code suivant pour répertorier les articles dans Archive.php, mais je souhaite que les résultats soient classés par nom, par ordre croissant. J'ai vérifié le codex, mais la réponse ne me semble pas claire. Comment puis-je que cela fonctionne?

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

Merci d'avance.

11
Dave Burns

Pour ce faire, le moyen le plus simple consiste à utiliser un crochet (le crochet pre_get_posts) pour modifier l'ordre. Mais vous devez vérifier que la requête en est une pour laquelle vous souhaitez modifier l'ordre! ( is_archive() ou is_post_type_archive() devrait suffire.)

Par exemple, placez ce qui suit dans le functions.php de votre thème ...

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;    
    };
29
Stephen Harris
<?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; ?>
1

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

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

query_posts($args);
0
josh