Sortowanie wpisów według daty modyfikacji

Sortowanie wpisów

Domyślnie w WordPressie wpisy są sortowane według daty publikacji – u góry strony znajduje się zawsze najnowszy tekst. W większości przypadków takie uporządkowanie treści jest odpowiednie, ale zdarzają się przypadki, w których chcielibyśmy posortować wpisy inaczej.

Specyficzną sytuacją jest sortowanie wpisów według daty ich modyfikacji. Takie uporządkowanie treści może sprawdzić się jeśli nie chcemy tworzyć nowych wpisów (na przykład dlatego, że istniejące mają już dobrą pozycję w wyszukiwarkach), ale jednocześnie chcemy, aby nasi czytelnicy zorientowali się, że dany wpis zawiera jakieś nowe informacje. Uaktualniony wpis zachowa się prawie tak samo, jak wpis nowy – czyli trafi na szczyt listy wpisów i do kanału RSS.

Zmiana sortowania wpisów

Warto wiedzieć, że WordPress sam z siebie zapisuje datę i czas modyfikacji wszystkich wpisów i stron, dzięki czemu zmiana sortowania wpisów nie jest trudna. Najprościej zrobić to za pomocą jednej z dostępnych w repozytorium wtyczek – ja wybrałem Posts Order. Po instalacji rozszerzenia wystarczy przejść do jego ustawień (Ustawienia → Posts order) i wybrać interesujące nas sortowanie wpisów.

Posts Order

Można ustawić kolejność pojawiania się wpisów osobno dla strony głównej (Homepage) i dla archiwów kategorii (Categories). Do wyboru jest sortowanie według identyfikatora wpisu, daty publikacji lub modyfikacji, tytułu, autora, adresu URL (slug) oraz atrybutu menu_order (o którym więcej można przeczytać w tym wpisie).

Oczywiście dokładnie taki sam efekt możemy osiągnąć bez korzystania z wtyczki. Aby nasze wpisy były wyświetlane według daty modyfikacji wystarczy do pliku functions.php lub do pliku wtyczki dodać taki kod:

function wpzen_reorder_posts($query) {
    if($query->is_main_query() && ($query->is_home() || $query->is_search() || $query->is_archive())) {
        $query->set('orderby', 'modified');
        $query->set('order', 'desc');
    }
}
add_action('pre_get_posts', 'wpzen_reorder_posts');

Warto zauważyć, że kod ten zmieni sortowanie tylko na stronie głównej (is_home()), na stronie wyników wyszukiwania (is_search()) i na stronach archiwów (is_archive()). Jeśli chcemy zostawić domyślne sortowanie wpisów na którejś z tych stron, wystarczy usunąć sprawdzanie wybranego warunku z kodu.

Wyświetlanie daty modyfikacji wpisu

Gdy już posortowaliśmy nasze wpisy według daty modyfikacji, to wypadałoby jeszcze tę datę gdzieś wyświetlić. Posłuży nam do tego funkcja the_modified_time(). Możemy ją wstawić w dowolnym miejscu w kodzie naszego motywu, pod warunkiem, że zrobimy to wewnątrz pętli wyświetlającej wpisy (The Loop). Można też poszukać w plikach motywu miejsca, w którym znajduje się wywołanie jednej z funkcji zwracających datę i/lub czas publikacji wpisu (the_date(), the_time(), get_the_date() lub get_the_time()). Niestety, tutaj wiele zależy od konkretnego motywu, tak więc nie jestem w stanie wskazać pliku, w którym należy szukać.

Jeśli nie czujemy się na siłach, aby samodzielnie znaleźć odpowiednie miejsce w kodzie motywu, możemy prawie automatycznie wyświetlić datę i czas modyfikacji wpisu nad lub pod jego treścią. Aby to zrobić wystarczy do pliku functions.php wstawić następujący kod:

// Wyświetlanie daty i czasu modyfikacji nad treścią wpisu
function wpzen_add_modified_time_before($content) {
    if(is_single()) {
        $content = get_the_modified_date().' '.get_the_modified_time().$content;
    }
    return $content;
}
add_filter('the_content', 'wpzen_add_modified_time_before');
// Wyświetlanie daty i czasu modyfikacji pod treścią wpisu
function wpzen_add_modified_time_after($content) {
    if(is_single()) {
        $content .= get_the_modified_date().' '.get_the_modified_time();
    }
    return $content;
}
add_filter('the_content', 'wpzen_add_modified_time_after');

Bonus: data modyfikacji w panelu administracyjnym

Skoro już sortujemy wpisy na stronie według daty modyfikacji, to dobrze byłoby jeszcze móc tę datę zobaczyć w panelu administracyjnym. Posłużyć się tutaj można wtyczką Last Modified Timestamp, która dodaje do listy wpisów nową kolumnę zawierającą czas ostatniej modyfikacji wpisu. Oczywiście listę wpisów możemy sortować według tej kolumny.

Bezpośredni link