Sortieren Sie die Ergebnisse nach Name und aufsteigender Reihenfolge auf Archive.php

15

Ich verwende derzeit den folgenden Code, um Beiträge in Archive.php aufzulisten, aber ich möchte, dass die Ergebnisse nach Namen in aufsteigender Reihenfolge sortiert werden. Ich habe den Codex überprüft, aber die Antwort ist mir nicht klar. Wie kann ich das zum Laufen bringen?

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

Danke im Voraus.

Dave Burns
quelle
Wenn Sie eine benutzerdefinierte Abfrage in Ihrer archive.php verwenden, können Sie diese bitte anzeigen? Kannst du die komplette archive.php auf pastie.org posten und deine Antwort mit dem Link aktualisieren?
Hameedullah Khan

Antworten:

35

Der einfachste Weg, dies zu tun, besteht darin, einen Haken (den pre_get_postsHaken) zu verwenden, um die Reihenfolge zu ändern. Sie sollten jedoch überprüfen, ob es sich bei der Abfrage um eine handelt, für die Sie die Reihenfolge ändern möchten! ( is_archive()oder is_post_type_archive()sollte ausreichen.)

Fügen Sie beispielsweise Folgendes in die functions.php Ihres Themas ein ...

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
quelle
Hallo, können Sie zeigen, wie die Standardbestellung funktioniert? Einige Links, wenn möglich. Danke
Latheesh VM Villa
@LatheeshVMVilla WP wurde als Blog entwickelt, daher erfolgt die sinnvolle / Standardreihenfolge nach post_date DESC (= absteigend). Das ist also der neueste Post-First. Wenn Sie WP für etwas verwenden, bei dem die Zeit weniger relevant ist (die meisten Arten von Listen, wie Ihre Datensatzsammlung, Rezepte, ein Glossar, ...), sollten Sie häufig post_title ASC (= Ascending, also alphabetisch nach Titel) bestellen mit Zahlen vor Buchstaben).
user3445853
Vielen Dank. Funktioniert gut für meine Taxonomie-Archivseite.
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
quelle
1
Können Sie bitte erklären, warum dies dem OP hilft? Bitte fügen Sie immer eine Erklärung über einen Code. Vielen Dank.
Kaiser
Die Frage war Sortieren Sie die Ergebnisse nach Name und aufsteigender Reihenfolge auf Archive.php. Vermutlich wird dieser Code laut Antwortenden die Ergebnisse nach Name und aufsteigender Reihenfolge auf Archive.php sortieren.
Jon
0

Wenn Sie nur nach Stephens Antwort fragen und nach dem Titel sortieren möchten, können Sie dies in Ihrer Vorlagendatei verwenden:

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

query_posts($args);
Josh
quelle
5
Direkt aus der WordPress-Code-Referenz - "Diese Funktion überschreibt die Hauptabfrage vollständig und ist nicht für die Verwendung durch Plugins oder Themes vorgesehen. Ihr zu vereinfachter Ansatz zum Ändern der Hauptabfrage kann problematisch sein und sollte nach Möglichkeit vermieden werden. In den meisten Fällen In diesen Fällen gibt es bessere und leistungsfähigere Optionen zum Ändern der Hauptabfrage, z. B. über die Aktion 'pre_get_posts' in WP_Query. " Fazit @Stephen Harris hat den richtigen Weg, dies zu erreichen. developer.wordpress.org/reference/functions/query_posts
Michael