Исключить категорию на странице списка блога

У меня есть сайт с страницей новостей (архив для категории «новости») и отдельная страница блога. Когда я делаю сообщение для страницы новостей, я выбираю категорию «новости». Итак, на странице новостей вы видите только сообщения с новостями, но на странице блога вы можете видеть все сообщения. То, что я хотел бы сделать, предпочтительно показать все сообщения ЗА ИСКЛЮЧЕНИЕМ сообщений «новостей» на странице блога. Как мне это сделать?

<!--post start--> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <!--post start--> <div class="post"> <div class="box"> <div class="postimgbox"> <?php if ((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) { ?> <?php the_post_thumbnail(); ?> <?php } else { } ?> </div> <ul class="post_meta"> <li class="post_date">&nbsp;&nbsp;<?php echo get_the_time('M, d, Y') ?></li> <li class="post_comment">&nbsp;&nbsp; <?php comments_popup_link('No Comments.', '1 Comment.', '% Comments.'); ?> </li> <br /> <li class="posted_by">&nbsp;&nbsp; <?php the_author_posts_link(); ?> </li> <br /> <li class="post_category">&nbsp;&nbsp; <?php the_category(', '); ?> </li> <br /> </ul> </div> <div class="post_content"> <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"> <?php the_title(); ?> </a></h1> <?php the_excerpt(); ?> <a class="read_more" href="<?php the_permalink() ?>"><?php _e('Read More', 'infoway'); ?>&nbsp;<span class="button-tip"></span></a> </div> </div> <!--End Post--> 

Выше приведен код из blog.php, файла php, который я пытаюсь изменить, поскольку это шаблон для моей страницы блога (если это помогает)

Solutions Collecting From Web of "Исключить категорию на странице списка блога"

Из плагина или файла functions.php вашей темы:

 function wpse106861_mod_query( $query ) { /* are we on the blog page ? */ if ( $query->is_home() && $query->is_main_query() ) { /* get ID of news category */ $news_id = get_cat_ID( 'news' ); /* exclude posts in new from query */ $query->set( 'category__not_in' => array( $news_id ) ); } } add_action( 'pre_get_posts', 'wpse106861_mod_query' ); 

Обновить
Что касается комментария: is_home должен возвращать true на любой странице индекса блога, независимо от того, является ли это статической страницей или вашей главной страницей. Вы также можете проверить на первой странице так же, слегка изменив условное:

 if ( $query->is_front_page() && $query->is_main_query() ) 

Связанные Чтение

  • pre_get_posts hook
  • get_cat_ID
  • Класс WP_Query

Вы можете сделать это с pre_get_posts фильтра pre_get_posts . Делай это так:

 function my_exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'category__not_in', array( 1, 1347 ) ); // where 1 and 1347 are IDs of excluded categories } } add_action( 'pre_get_posts', 'my_exclude_category' ); 

PS. Я предполагаю, что эта страница блога задана как ваша страница сообщений.

Спасибо, что ответили на мой вопрос, но, пытаясь сделать что-то еще, мне удалось выработать ответ, и я считаю, что это самый простой и короткий ответ. В главном цикле для размещения сообщений вы увидите что-то вроде строк

 <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

Прежде чем этот код добавит следующую строку,

 <?php query_posts('cat=-4'); ?> 

Где 4 – идентификатор категории. Знак – означает «нет» и похож на! в C. Это будет означать, что все сообщения, не входящие в категорию ID 4, будут отображаться на этой странице