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)