Wczoraj opublikowałem wpis o tym, jak dodać datę ostatniej aktualizacji/modyfikacji do „nagłówka” wpisu. W tym momencie do akcji wkroczył SpeX, który w swoim komentarzu zaproponował, że można by wpis o sposób na sortowanie postów/wpisów po dacie modyfikacji. Idea na wpis jak najbardziej słuszna, choć sam osobiście nie przepadam za tego typu sortowanie i tym samym zazwyczaj z niego nie korzystam (ale zdarzają się wyjątki).
Sortowanie wpisów w WordPressie
Bez sztucznego generowania niepotrzebnej treści pod wyszukiwarki (ach te SEO ;-)) do sortowania wpisów (postów) po dacie modyfikacji skorzystamy z kilku linijek kodu, które – standardowo – umieścimy w pliku functions.php (oczywiście w motywie potomnym):
function webinsider_custom_post_orderby( $query ) {
if ( ( $query->is_main_query() && !is_admin() ) && ( $query->is_feed() || $query->is_search() ) ) {
$query->set( 'orderby', 'post_modified' );
}
}
add_action( 'pre_get_posts', 'webinsider_custom_post_orderby' );
Powyższy kod ustawi filtrowanie po dacie modyfikacji, ale tylko w kanale RSS i w wyszukiwarce – powiedzmy, że w tych miejscach ma to dla mnie największy sens. Ale nie ma problemu, by sortowanie zmienić również w innych miejscach. Do dyspozycji mamy jeszcze m.in.:
- is_home()
- is_archive()
- is_category()
- is_tag()
Warto tylko uwzględnić to, że Wasz motyw (np. w dodatkowych modułach do wyświetlania wpisów) może korzystać z jakichś niestandardowych funkcji i wtedy może być konieczne dostosowanie tego kodu, np. o dodatkowe akcje/filtry.
Na koniec jeszcze kilka innych parametrów/wartości, na podstawie których można sortować (nie tylko) wpisy:
author, post_author, title, post_title, name, post_name, date, post_date, modified, post_modified, modified_gmt, post_modified_gmt, parent, post_parent, ID, menu_order, comment_count, rand
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Sortowanie w RSSie znaczy re-publikowanie w RSS?
W sumie teraz mnie tak naszło, a czy da się jakoś rozróżnić modyfikacje wpisów? Bo co innego, gdy poprawiamy tylko literówki, a co innego jak aktualizujemy wpis.
ps. Czy dobrze kojarzę, iż bez tych modyfikacji można jeszcze oszukać „WP” przez edycje parametru „Opublikowano:” w sekcji „Opublikuj” edycji posta. Bo rozumiem, iż wtedy zmieniam w bazie parametr post_data
W sumie, to czy by się nie dało dokleić swojego pola „Edytowano” do „Opublikuj”, gdzie by można zmieniać datę edycji ew. dać ptaszka „Aktualizacja nie zmieni daty edycji” tak by nie zmieniać parametru post_modified jak tylko poprawiamy literówki.
WordPress sam z siebie raczej nie rozróżnia powodu modyfikacji. Można ew. napisać jakieś własne rozwiązanie, może w oparciu o „custom fileds” – pole zaznaczone, modyfikacja jest traktowana jako aktualizacja, w innym wypadku jest pomijana (wtedy wystarczy dodatkowy warunek do skryptu). I tak, alternatywnie możesz zmienić też date publikacji.
@Patryk, właśnie odnośnie mojego ostatniego akapitu, czy dało by się wymusić na WP by nie modyfikowało wartości dla parametry post_modified?
Przykładowo w rejonie przycisku publikuj mamy pole „[x] Aktualizacja daty ostatniej modyfikacji”. Przy literówkach odznaczamy tylko „ptaszka” i publikujemy.
Tak, możesz np. dodać sobie „własne pole” (custom field) i albo niech to będzie pole do zaznaczenia, albo pole z datą, i odpowiednio zmodyfikować skrypt (kod) tak, by podczas sprawdzania warunku uwzględniał to pole.
Domyślam się iż is_home() to główny loop na stronie głównej.
A co to jest modified_gmt, post_modified_gmt ?
PS. Niema czegoś ala comment_count tylko comment_date by wyciągnąć posty z ostatnimi dyskusjami?
Funkcja „is_home” sprawdza, czy jest wyświetlana strona główna. GMT w nazwie tych funkcji pochodzi od Greenwich Mean Time, czyli strefy czasowej (od wielu lat miejsce GMT zajmuje UTC, ale często jeszcze używa się określenia GMT).
Co do wyciągania postów „z ostatnimi dyskusjami” to zerknij na funkcję „get_comments”, być może to będzie to czego szukasz.
Ale czy przypadkiem „get_comments” nie zwraca np 10 ostatnich komentarzy, a nie 10 ostatnich wpisów w których komentowano. A mi właśnie chodzi o tą drobną różnicę.`
Hm… Z tego co kojarzę, to chyba w WordPressie nie mamy w standardzie nic takiego (jestem teraz przez kilka dni „w trasie bez komputera”, więc nawet nie bardzo mam jak sprawdzić w dokumentacji), a więc musiałbyś napisać np. jakaś funkcję, czy filtr, który wykonałby kilka operacji na bazie danych (może z mcomment_date) i zwrócił odpowiednio przefiltrowaną pulę postów. Być może przez odczyt komentarzy wg daty, pobranie ID postów, wykluczenie duplikatów i zrobienie z tego listy, czyli trochę MySQL, trochę PHP i na koniec jeszcze odrobina HTML/CSS.
Bardzo przydatna dla mnie funkcja. Niestety sortuje wpisy malejąco. Czy można ustawić jakiś parametr aby wpisy były sortowane w kolejności rosnącej?
W WordPressie prawie wszystko można… Pod linijką:
możesz dodać:
dla sortowania w standardowej kolejności, lub w kolejności odwrotnej:
W przypadku, gdybyś dodawał więcej parametrów, to najlepiej skorzystać z tabeli (array).