Sortowanie wpisów w WordPressie

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”:

Menu order dla wpisów w WordPressie
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' );
  }
} );
Pani Marta
Jestem Marta. Pani Marta. Od kilku lat pracuję w WordPressie i ciągle jestem pod wrażeniem jego możliwości. Na moim blogu dzielę się prostymi sposobami na bezwtyczkowe ulepszenie swojej strony. Jeśli brakuje Ci czegoś w tym wpisie lub chcesz, abym poruszyła temat, na którym Ci zależy, daj znać w komentarzu!

Dodaj komentarz

*

*

*

Twój adres e-mail nie zostanie opublikowany.