Domyślnie WordPress sortuje wpisy po dacie dodania wpisu. Istnieje jednak możliwość sortowania ich po niemal wszystkim (a może wszystkim?).
Sortowanie wpisów po dacie modyfikacji
Ten sposób sortowania jest przydatny, gdy często aktualizujesz stare wpisy i chcesz, aby po aktualizacji wskakiwały na szczyt listy. Poniższy kod dodaj do pliku functions.php
Twojego motywu potomnego lub skorzytaj z wtyczki Code Snippets.
add_action( 'pre_get_posts', function( $query ) { $query->set( 'orderby', 'modified' ); $query->set( 'order', 'DESC' ); } );
Sortowanie po liczbie komentarzy
Jeśli chcesz, aby najbardziej popularne (czyli najczęściej komentowane) wpisy były wyświetlane najpierw, skorzystaj z sortowania po liczbie komentarzy:
add_action( 'pre_get_posts', function( $query ) { $query->set( 'orderby', 'comment_count' ); $query->set( 'order', 'DESC' ); } );
Sortowanie losowe
Wpisy można również sortować losowo. W ten sposób po każdym odświeżeniu strony (i wyczyszczeniu cache, jeśli korzystasz z cache’owania po stronie serwera) uzyskasz inną kolejność wpisów.
add_action( 'pre_get_posts', function( $query ) { $query->set( 'orderby', 'rand' ); } );
Sortowanie po menu_order
Jeśli chcesz mieć kontrolę totalną nad sortowaniem wpisów, możesz skorzystać z sortowania po kolejności, czyli tzw. menu_order
. Wystarczy, że każdemu wpisowi przypiszesz kolejność w „Szybkiej edycji”:

add_action( 'pre_get_posts', function( $query ) { $query->set( 'orderby', 'menu_order' ); $query->set( 'order', 'ASC' ); } );
Uwaga: domyślnie WordPress nie wspiera menu_order
dla wpisów. Możesz włączyć wsparcie w swoim motywie za pomocą następującego kodu:
add_action( 'admin_init', function() { add_post_type_support( 'post', 'page-attributes' ); } );
Wykluczanie konkretnych stron z sortowania
Powyższe fragmenty kodu będą sortowały wpisy wszędzie: w panelu administratora, na stronie z wynikami wyszukiwania, w sidebarach. Nie zawsze jest to pożądane rozwiązanie, dlatego możesz zrobić wyjątki:
!is_admin()
: wykluczy sortowanie w panelu administratora$query->is_main_query()
: ograniczy sortowanie do głównego zapytania, a tym samym wykluczy sortowanie wpisów np. w sidebarach!$query->is_search
: wykluczy sortowanie podczas wyszukiwania i na stronie z wynikami wyszukiwania!is_category()
: wykluczy sortowanie wpisów na stronach kategorii
Przykład sortowania po menu_order
i – gdy kilka wpisów ma to samo menu_order
– dacie modyfikacji, z wyłączeniem panelu administratora i wyników wyszukiwania:
add_action( 'pre_get_posts', function( $query ) { if ( !is_admin() && $query->is_main_query() && !$query->is_search ) { $query->set( 'orderby', 'menu_order modified' ); $query->set( 'order', 'DESC' ); } } );