Програмний пошук публікацій WordPress за діапазоном дат
TL; DR: код, опублікований у цій публікації, показує, як можна змінити запит, який виконується на сторінці «Усі публікації», щоб можна було обмежити пошук публікацій певним діапазоном дат.
Минуло небагато часу з тих пір, як я востаннє писав про використання post_whereфільтра для модифікації пошукового запиту, який виконується на певній сторінці, наприклад, в області «Усі повідомлення» WordPress. Але враховуючи той факт, що існує безліч варіантів використання для отримання публікацій – і користувацьких типів публікацій – різними способами, існує безліч способів використання цього єдиного фільтра.
Пошук дописів за діапазоном дат
Щоб шукати публікації за діапазоном дат, ось що має статися:
- Реєстрація зворотного дзвінка з
posts_whereфільтром, - Переконайтеся, що функція приймає рядок для
whereта екземпляр,WP_Queryякий виконується на сторінці - Отримайте сьогоднішню дату й час, а також дату й час чотири тижні тому
- Додайте перед реченням,
whereщоб обмежити результати датою returnоновлений запит.
<?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
);
Результатом цієї функції є модифікований запит, який обмежує дописи, які повертаються до вказаної дати та часу. А саме чотири тижні тому з точністю до години, хвилини та секунди.
Ви можете змінити це, оновивши -4 weeksрядок, переданий у strtotimeфункцію (проте я рекомендую переглянути сторінку посібника PHP, посилання на яке наведено нижче, щоб зрозуміти, як ця функція працює з такою мовою).
Список літератури
[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)