Intereting Posts
отображать изображение в RSS-канале Запускать одноразовый скрипт, вызывающий функции плагина Назначить URL-адрес изображения на страницу через PHP Лучший способ настроить wp_nav_menu Результаты пользовательского поиска Показывать только 1 термин таксономии текущих должностей Вытягивание в категории сообщений и детей в пределах категории Поиск / фильтрация таксономии с несколькими таксономиями и множественными таксономическими терминами Категории фильтров, используемые с пользовательской структурой Permalink Получение диалогового приглашения «Изменения, которые вы сделали, будет потеряно» на странице пользовательского типа сообщений Почему этот код jquery / java-скрипта не работает в мобильных устройствах? Автоматически добавляет проверку скрытого заголовка и добавляет абзац при добавлении текста Устаревший: mysql_connect (): Отключить плагины на странице cron и ajax Использование плагина GraphQL с платформой Pods

Как изменить основной запрос на основе метаданных

Я хотел бы изменить порядок сортировки запроса на основе мета в возвращаемых сообщениях. В частности, сообщения – это события с датой события, и я фильтрую их как в будущем, так и в прошлом. Если все события в прошлом, я хочу, чтобы самые последние были первыми, если все в будущем, то следующее должно быть первым. Я пробовал все виды в функции pre-get-posts, например:

function resort($query){ if($query->is_main_query() && is_tax('event-category'){ if($query->have_posts()){ // do something based on the first post wp_reset_query(); } } } 

Функция находится в functions.php и увольняется, но она не проходит мимо have_posts() , хотя основной запрос возвращает много сообщений. Что мне не хватает?

  1. Что это значит, что вызывает запрос, и не может ли он быть запущен в любом месте? Я попробовал query_posts() и потерпел неудачу.
  2. Как я могу создать пользовательский запрос, который является именно основным запросом?
  3. расходы меня не беспокоят – это небольшой сайт.

Наконец, понял. Этот код в functions.php:

 function set_order_by_last_date($query){ $query->set( 'orderby', 'eventstart'); $query->set( 'order', 'DESC' ); $query->get_posts(); if ($query->have_posts()){ if ( eo_get_the_end('Ymd',$query->posts[0]->ID,$query->posts[0]->occurrence_id) > date('Ymd') ){ $query->set( 'event_end_after', 'today' ); $query->set( 'orderby', 'eventstart'); $query->set( 'order', 'ASC' ); } else { $query->set( 'event_end_before', 'today' ); $query->set( 'orderby', 'eventstart'); $query->set( 'order', 'DESC' ); } } return $query->query_vars; } 

Вызывается из файла шаблона:

 <?php query_posts(set_order_by_last_date(clone $wp_query));?> 

Функции vars и eo_ – это отличный плагин органайзера событий. Спасибо @ jack-johansson за указатели.