Intereting Posts
Создание другого сайта WordPress в качестве поддомена сайта wordpress Как выполнять поиск пользователей по всему миру на основе многоуровневой установки? Модификация того, как данные контролируются / отображаются и сохраняются Отображение категорий сообщений wp в мой пользовательский обмен Создание настраиваемых полей администратора is_home () возвращает false на домашней странице! Когда домашняя страница НЕ является домашней страницей? Пользовательская регистрация ссылки на бэкэнд-форме Нежелательная «задержка сканирования: 10» добавлена ​​в мой файл robots.txt Изменяется ли user_register в многопользовательском режиме? После отправки комментариев выберите текущую вкладку Ошибки плагина woocommerce Как я могу изменить налоговый запрос для основного цикла для архивов таксономии? Мне нужно изменить исходный код с моей статической страницы wp_list_categories () с типами вложений Пользовательский тип сообщения показывает пользовательскую домашнюю страницу, а не страницу архива

Показать последние сообщения из категории исключенных

Я хочу исключить сообщения категории из страниц индекса и архива, поэтому я написал этот скрипт в functions.php :

 function exclude_category($query) { if ( $query->is_home() || $query->is_archive() ) { $query->set( 'cat', '-33799' ); } return $query; } add_filter('pre_get_posts', 'exclude_category'); 

Все работает отлично до сих пор, но мне нужно показать последние сообщения из этой категории в поле на всех страницах:

 $args = array ( 'category' => "33799", 'posts_per_page' => 2 ); $recentposts = get_posts( $args ); foreach ( $recentposts as $post ) : setup_postdata( $post ); if ( get_post_meta( $post->ID, "news_thumb", TRUE ) ) { $img = get_post_custom_values( "news_thumb", $post->ID ); } else { $img = 'images/no_pic.jpg'; } if ( get_post_meta( $post->ID, "news_short_content", TRUE ) ) { $content = get_post_custom_values( "news_short_content", $post->ID ); } else { $content = ''; } ?> SHOW_SOMETHING_IN_LOOP <?php endforeach; 

Когда я добавляю этот скрипт в header.php , я получаю неправильный вывод. Я могу понять, почему это происходит, потому что я исключил категорию в запросе, но как я могу это исправить?

С этим предложением Pieter Goosen решил проблему.

 if ( $query->is_home() || $query->is_archive() ) 

Должно быть:

 if (!is_admin() && $query->is_main_query() && ( $query->is_home() || $query->is_archive() ) ) 

Затем объясняется, почему это решение сработало:

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