Intereting Posts

Результаты поиска, отсортированные по типам сообщений

Я работаю над сайтом с несколькими типами сообщений – 4, если быть точным, – и я пытаюсь настроить страницу результатов поиска, чтобы иметь фильтр / сортировать результаты по типам сообщений.

Например, когда человек ищет термин, который они берут на страницу с результатами, отображаются все сообщения, найденные из всех типов сообщений, но вверху есть ссылки на разные типы ссылок, которые будут сортировать результаты и показывать только соответствующую запись типа. Прямо сейчас у меня есть несколько циклов на странице результатов поиска для каждого типа сообщения, но когда я его тестирую, циклы показывают одинаковые результаты, хотя каждый цикл имеет запрос для другого типа сообщения.

Как исправить цикл так, чтобы он отображал только результаты поиска из этого типа сообщений? Я не хочу иметь разные формы поиска или сбросить запрос и в итоге потерять поисковый запрос. Вот некоторые из кода со страницы – http://pastebin.com/L9zEw1cn

Первый цикл – это цикл по умолчанию, который покажет все результаты, а второй цикл – это цикл, который я пытаюсь использовать для остальных типов сообщений.

Так или иначе, чтобы исправить второй цикл, чтобы он показывал только результаты поиска для этого типа сообщения?

Любая помощь будет принята с благодарностью. Благодарю.

Ответить

Solutions Collecting From Web of "Результаты поиска, отсортированные по типам сообщений"

Вы можете использовать фильтры posts_clauses Например:

 add_filter( 'posts_clauses', 'post_query_order', 20, 1 ); function post_query_order( $pieces ) { global $wpdb; $pieces['orderby'] = $wpdb->prefix.'posts.post_type ASC'; return $pieces; } 

Во втором цикле вы настраиваете аргументы для запроса постов, но вы их нигде не используете. Вы должны поместить query_posts( $args ) перед вторым циклом. Вы также можете использовать функцию get_posts или WP_Query .

EDIT: со страницы о функции query_posts на WordPress codex :

query_posts () – это самый простой, но не предпочтительный или наиболее эффективный способ изменить запрос по умолчанию, используемый WordPress для отображения сообщений. Используйте query_posts () для отображения разных сообщений, чем те, которые обычно отображаются на определенном URL-адресе.

Прямо сейчас, в вашем коде, вы дважды перебираете те же сообщения. Второй цикл точно такой же, как и первый.

Теперь, если вы поместите query_posts() с разными аргументами перед вторым циклом, например:

  $ args = array ('post_type' => 'videos', 's' => $ s);
 query_posts ($ args);
 if (has_posts ()):
 while (has_posts ()):
 the_post ();

 // Отображение сообщения

 ENDWHILE;  ENDIF;
 wp_reset_postdata ();  ?> 

Вы будете перебирать разные посты.