TL; DR: Kod udostępniony w tym poście pokazuje, jak zmodyfikować zapytanie uruchamiane na stronie Wszystkie posty, aby ograniczyć sposób wyszukiwania postów do określonego zakresu dat.
Minęło trochę czasu, odkąd ostatnio pisałem o używaniu post_wherefiltra do modyfikowania zapytania wyszukiwania, które działa na danej stronie, na przykład w obszarze Wszystkie posty w WordPressie. Ale biorąc pod uwagę fakt, że istnieje wiele zastosowań do pobierania postów – i niestandardowych typów postów – na różne sposoby, istnieje wiele sposobów użycia tego pojedynczego filtra.
Szukaj postów według zakresu dat
Aby wyszukiwać posty według zakresu dat, należy wykonać następujące czynności:
- Zarejestruj oddzwonienie z
posts_wherefiltrem, - Upewnij się, że funkcja akceptuje ciąg znaków
wherei instancjęWP_Query, która jest uruchomiona na stronie - Pobierz dzisiejszą datę i godzinę oraz datę i godzinę sprzed czterech tygodni
- Dołącz
whereklauzulę, aby ograniczyć wyniki do daty returnzaktualizowane zapytanie.
<?php
add_filter(
'posts_where',
function (string $where, WP_Query $query ): string {
global $wpdb;
$todays_date = gmdate( 'Y-m-d H:i:s', strtotime( 'now') );
$four_weeks_ago = gmdate( 'Y-m-d H:i:s', strtotime( '-4 weeks') );
$prepend = $wpdb->prepare(
" AND {$wpdb->posts}.post_date > %s",
$four_weeks_ago
);
$prepend .= $wpdb->prepare(
" AND {$wpdb->posts}.post_date < %s",
$todays_date
);
return $prepend. $where;
}, 101, 2
);
Wynikiem tej funkcji jest zmodyfikowane zapytanie, które ogranicza posty zwracane do określonej daty i godziny. Mianowicie cztery tygodnie temu do godziny, minuty i sekundy.
Możesz to zmienić, aktualizując -4 weeksciąg znaków przekazany do strtotimefunkcji (ale polecam przejrzenie strony podręcznika PHP, do której link znajduje się poniżej, aby zrozumieć, jak ta funkcja działa w takim języku).
Bibliografia
[posts_where](https://developer.wordpress.org/reference/hooks/posts_where/)[WP_Query](https://developer.wordpress.org/reference/classes/wp_query/)[wpdb](https://developer.wordpress.org/reference/classes/wpdb/)[gmdate](https://www.php.net/manual/en/function.gmdate.php)[strtotime](https://www.php.net/manual/en/function.strtotime.php)