Intereting Posts
Как сделать первый пост в цикле стилизованным, как «новый / признанный» пост? Переопределить основную функцию WordPress wp_referer_field WP REST API v2. фильтры не работают Скрыть категории от авторов отправка электронной почты с прикрепленным файлом PDF, который содержит все значения входного поля контакта 7 в wordpress Отображения Foreach от последнего до первого Как отображать наиболее просматриваемые сообщения на боковой панели? Почему jquery-ui-core enqueueing в моем нижнем колонтитуле вместо заголовка? Почему WordPress по-прежнему не поддерживает SFTP? Профили пользователей и ассоциации объектов установка комментариев по умолчанию для страниц и пользовательских типов сообщений? Добавление столбца в таблицу wp_posts или объединение таблицы wp_posts с другой таблицей Невозможно заставить php работать внутри javascript для виджета wordpress add_submenu_page () отсутствует ссылка admin.php? префикс Почему сообщения в блоге не отображаются?

Как отображать сообщения 1 год назад с пользовательским циклом WP_Query?

У меня есть специальный цикл WP_Query, который я использую для главной страницы архива. Как я могу отфильтровать пользовательский запрос на сообщения diplay в течение 2 дней +/- года назад с сегодняшнего дня?

Мой текущий запрос:

$posts_args = array( 'post_type' => 'album', 'post_status' => 'published', 'paged' => $paged, 'order' => strtoupper($album_sort), 'orderby' => 'date' ); 

Я знаю, что код показывает этот параметр времени для WP_Query, но я никогда не использовал фильтр цикла и немного запутался в реализации.

 // Create a new filtering function that will add our where clause to the query function filter_where( $where = '' ) { // posts 30 to 60 days old $where .= " AND post_date >= '" . date('Ym-d', strtotime('-60 days')) . "'" . " AND post_date <= '" . date('Ym-d', strtotime('-30 days')) . "'"; return $where; } add_filter( 'posts_where', 'filter_where' ); $query = new WP_Query( $query_string ); remove_filter( 'posts_where', 'filter_where' ); 

Любая помощь приветствуется.

Solutions Collecting From Web of "Как отображать сообщения 1 год назад с пользовательским циклом WP_Query?"

Фильтры позволяют изменять данные, поскольку они используются ядром wordpress. Это огромная часть того, что дает WordPress столько гибкости.

add_filter() имеет 2 основных параметра, крючок фильтра и функцию обратного вызова. Когда фильтр будет выполнен, все обратные вызовы, связанные с этим фильтром, будут выполнены.

Естественно, фильтр должен передавать некоторые данные, а затем искать ответ. Этот конкретный фильтр находится на $where , поэтому он передается, а затем возвращается после того, как функция обратного вызова изменила его.

$where содержит часть конечной строки запроса, которая используется WP_Query при WP_Query метода query() . Модифицируя это, вы можете выполнять фильтрацию, которая напрямую не возможна с WP_Query самого WP_Query (например, расширенной фильтрации дат).

В вашем случае, что вы собираетесь делать, это примерно так:

 function wpse46066_filter_where( $where = '' ) { // posts 30 to 60 days old $where .= " AND post_date >= '" . date('Ym-d', strtotime('-1 year -2 days')) . "'" . " AND post_date <= '" . date('Ym-d', strtotime('-1 year 2 days')) . "'"; return $where; } add_filter( 'posts_where', 'wpse46066_filter_where' ); $query = new WP_Query( $post_args ); remove_filter( 'posts_where', 'wpse46066_filter_where' ); 

Вы заметите, что на самом деле вы вообще не изменяете свои аргументы запросов, потому что фильтр работает независимо от того, WP_Query вход WP_Query получает от этих аргументов. Вы также заметите, что фильтр добавлен, затем применяется (вызывается WP_Query ), а затем удаляется. Это предотвращает все ваши запросы от того же ограничения времени, что и этот.

Заметка о strtotime() : Если вы используете несколько значений, вы должны свести на нет каждый из них. -1 year 2 days (при отсутствии високосного года) составляет 363 дня, а не 367. Если вы хотите поиграть с этим, вы можете использовать эту утилиту , которая хорошо показывает вам, что именно вы получаете.

Add_filter () в этом случае добавит содержимое в предложение «где» к каждому очередному вызову WP_Query.

Remove_filter () убьет этот фильтр.

В примере говорится: «Добавить условия в предложение« где »каждого следующего WP_Query», «Создать новый Wp_Query», «Я не хочу, чтобы другой WP_Query был изменен моим фильтром, так что убивайте его!»