Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)

Dziś będzie o tym, jak dodać do strony na WordPressie informacje o dacie ostatniej aktualizacji, i to w taki sposób, by data ta była zaciągana automatycznie, bez potrzeby ręcznego wypełniania jakiś dodatkowych pól – WordPress i tak przechowuje w bazie danych tego typu informacje.

Data ostatniej aktualizacji wpisu w WordPressie

Z racji tego, że sporo wpisów, które ukazują się na stronie Webinsider.pl to poradniki techniczne, a więc często data, która określa kiedy powstały dane treści ma szczególne znaczenie, bo chyba każdemu zależy, by prezentowane rozwiązanie nie okazało się tylko „niepotrzebną stratą czasu”.

Dlatego przy niektórych wpisów możecie trafić nie tylko na datę powstania wpisu, ale i datę ostatniej aktualizacji, dzięki czemu od razu wiadomo, czy prezentowane treści były w jakiś sposób aktualizowane, co daje większą szansę, że zadziałają rozwiązania z wpisów teoretycznie opublikowanych nawet kilka lat temu (dzięki aktualizacji treści):

Cała operacja sprowadza się do wykorzystania duetu w postaci motywu potomnego i kilkunastu linijek kodu w pliku functions.php:

function webinsider_wp_last_modified_post_date( $the_date ) {
    if ( get_post_type() === 'post' ) {
        $post_time = get_post_time( 'd.m.Y', 'His' );
        $post_modified_time = get_post_modified_time( 'd.m.Y', 'His' );
        if ( $post_modified_time !== $post_time ) {
            $date = sprintf( __( esc_html( get_post_time( 'd.m.Y' ) ) . ' (aktualizacja %s)' ), esc_html( get_post_modified_time( 'd.m.Y' ) ) );
        }
        else {
            $date = sprintf( __( esc_html( get_post_time( 'd.m.Y' ) ) ) );
        }
        return $date;
    } else {
	return $the_date;
    }
}
add_action( 'get_the_date', 'webinsider_wp_last_modified_post_date' );
add_action( 'get_the_time', 'webinsider_wp_last_modified_post_date' );

Powyższy kod sprawdza, czy data publikacji wpisu jest różna od daty ostatniej modyfikacji, i jeśli tak jest, to wtedy oprócz daty publikacji doda fragment odpowiedzialny za wyświetlenie informacji o dacie ostatniej aktualizacji (daty wyświetlane są w formacie 17.03.2017).

Oczywiście można go zmodyfikować, tak by porównywał również czas, ale moim zdaniem to generuje tylko niepotrzebne zamieszanie, bo wystarczy nawet w chwilę po publikacji zmienić jakąś literówkę, czy jakieś ustawienia dotyczące wpisu i już będziemy mieli dodatkową informację o aktualizacji. Stąd – moim zdaniem – porównywanie dat jest sensowniejszym rozwiązaniem.

Kilka dodatkowych modyfikacji

W komentarzach pojawiło się kilka pytań dotyczących modyfikacji tego kodu, dlatego uznałem, że warto też przy okazji odpowiadania na te komentarze zaktualizować artykuł, bo może nie każdy czyta komentarze.

Data aktualizacji również dla stron

By wyświetlić datę aktualizacji również dla stron, należy zmodyfikować linijkę z warunkiem „if” w powyższym kodzie:

if ( ( get_post_type() === 'post' ) || ( get_post_type() === 'page' ) ) {

Więcej informacji na ten temat znajdziecie w WordPress Codex (Function Reference/get post types).

Zmiana języka dla daty

Z racji tego, że mamy tu obsługę formatowania daty zgodną z PHP, to nic nie stoi na przeszkodzie, by zmienić format np. na „10 października 2018”. Przynajmniej w teorii wystarczy zamienić „d.m.Y” np. na „j F Y”:

get_post_modified_time( 'j F Y' )

Problem w tym, że spowoduje to wyświetlanie słownych składników daty w języku angielskim, niezależnie od ustawień regionalnych w WordPressie.

By wyświetlać te elementy zgodnie z językiem ustawionym w WordPressie, należy przekazać do funkcji dodatkowe parametry:

get_post_modified_time( 'j F Y', false, null, true )

Modyfikację wystarczy przeprowadzić w linijkach z „sprintf”.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Tworzysz stronę internetową i potrzebujesz pomocy?
Patryk
Tworzysz stronę internetową i potrzebujesz pomocy?