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

Я хотел бы изменить порядок сортировки запроса на основе мета в возвращаемых сообщениях. В частности, сообщения – это события с датой события, и я фильтрую их как в будущем, так и в прошлом. Если все события в прошлом, я хочу, чтобы самые последние были первыми, если все в будущем, то следующее должно быть первым. Я пробовал все виды в функции 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. расходы меня не беспокоят – это небольшой сайт.

Solutions Collecting From Web of "Как изменить основной запрос на основе метаданных"

Наконец, понял. Этот код в 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 за указатели.