Sortuj wyniki według nazwy i kolejności sortowania na Archive.php

15

Obecnie używam następującego kodu, aby wyświetlić listę postów w Archive.php, ale chcę, aby wyniki były sortowane według nazwy w kolejności rosnącej, sprawdziłem kodeks, ale odpowiedź nie jest dla mnie jasna, jak mogę to uruchomić?

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

Z góry dziękuję.

Dave Burns
źródło
jeśli używasz niestandardowego zapytania w pliku archive.php, możesz to pokazać? może opublikować pełny plik archive.php na pastie.org i zaktualizować swoją odpowiedź za pomocą linku?
Hameedullah Khan

Odpowiedzi:

36

Najłatwiej to zrobić za pomocą haka ( pre_get_postshaka), aby zmienić kolejność. Ale powinieneś sprawdzić, czy zapytanie jest tym, dla którego chcesz zmienić kolejność! ( is_archive()lub is_post_type_archive()powinno wystarczyć).

Na przykład wstaw następujące funkcje do funkcji motywu. 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
źródło
Witaj, czy będziesz w stanie pokazać, jak działa domyślne porządkowanie? Niektóre linki, jeśli to możliwe. Dzięki
Tokheesh VM Villa
@LatheeshVMVilla WP został opracowany jako blog, więc rozsądne / domyślne porządkowanie odbywa się według post_date DESC (= malejąco), więc jest to najnowsze-pierwsze-pierwsze. Jeśli używasz WP do czegoś, w którym czas jest mniej istotny (większość rodzajów list, takich jak zbiór rekordów, przepisy kulinarne, glosariusz, ...), będziesz chciał często zamawiać post_title ASC (= Rosnąco, więc alfabetycznie według tytułu z cyframi poprzedzającymi litery).
user3445853,
Dzięki. Działa dobrze dla mojej strony archiwum taksonomii.
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
źródło
1
Czy możesz wyjaśnić, dlaczego to pomaga PO? Proszę zawsze dodawać wyjaśnienia na kawałku kodu. Dzięki.
kaiser
Pytanie brzmiało: Sortuj wyniki według nazwy i kolejności sortowania na Archive.php. Prawdopodobnie zgodnie z odpowiedzią ten kod posortuje wyniki według nazwy i porządku rosnącego na Archive.php?
Jon
0

w odpowiedzi na odpowiedź Stephena, jeśli chcesz po prostu zapytać i uporządkować według tytułu, możesz użyć tego w pliku szablonu:

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

query_posts($args);
josh
źródło
5
Prosto z odwołania do kodu WordPress - „Ta funkcja całkowicie zastąpi główne zapytanie i nie jest przeznaczona do użycia przez wtyczki lub motywy. Jego zbyt uproszczone podejście do modyfikowania głównego zapytania może być problematyczne i należy go unikać wszędzie tam, gdzie to możliwe. W większości przypadki, istnieją lepsze, bardziej wydajne opcje modyfikacji głównego zapytania, na przykład poprzez akcję „pre_get_posts” w WP_Query. ” Podsumowując @ Stephen Harris ma właściwy sposób na osiągnięcie tego. developer.wordpress.org/reference/functions/query_posts
Michael