Меню архива разметки функциональных фильтров

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

Итак, я добавил код ниже к моим функциям.

function myTagFilter($query) { $post_type = $_GET['type']; if (is_tag()){ if (!$post_type) { $post_type = 'any'; } $query->set('post_type', $post_type); } return $query; }; add_filter('pre_get_posts','myTagFilter'); 

Теперь сообщения с экрана CPT отображаются в архиве тегов, но меню не работает. Вот ссылка, если вы хотите проверить это.

http://mt-spacehosting.com/fisheries/?s=framework+50

Итак, мой вопрос: зачем было нарушать меню из-за этого?

Solutions Collecting From Web of "Меню архива разметки функциональных фильтров"

is_tag() истинно для всей страницы архива тегов и для любых запросов, которые выполняются на ней. Вам нужно ограничить этот код только для основного запроса на этой странице, а запрос hte – это запрос тега, а не какой-либо другой запрос, например запрос меню. Вы делаете это, проверяя фактический объект запроса.

  function myTagFilter($query) { $post_type = $_GET['type']; if ($query->is_main_query() && $query->is_tag()){ if (!$post_type) { $post_type = 'any'; } $query->set('post_type', $post_type); } return $query; }; add_filter('pre_get_posts','myTagFilter'); 

is_tag() , is_single() , а другие условные обозначения – это функции, которые проверяют global объект $wp_query . Вы должны быть осторожны, чтобы не использовать их для проверки того, что не является global объектом.