Исключение рубрик с главной страницы

How-to-Make-a-Cool-WordPresСпособов исключения показа записей определенной рубрики на главной странице блога несколько. Больше всего мне нравится метод с добавлением своего фильтра в файл functions.php, так как это избавляет от необходимости править другие файлы шаблона, а в частности не надо возиться с переделкой цикла вывода записей в index.php через query_posts

Рассмотрим самый простой пример: удаляем записи рубрики с ID=5 с главной страницы, для этого добавим в файл functions.php код:

function removeFromHome($query) {
if ($query->is_home) 
	{$query->set('cat','-5');}
return $query; }
add_filter('pre_get_posts','removeFromHome');

Теперь на главной странице не будут присутствовать записи из рубрики с ID 5. Хочу напомнить, что в понимании WordPress главной страницей считается также и любая другая страница, образованная постраничной навигацией. То есть посты из рубрики 5 вы не увидите и на /page/2, /page/3 и др. Если вас это не устраивает, то вы должны слегка модифицировать приведенный код.

function removeFromHome($query) {
if ($query->is_home && !(is_paged())) 
	{$query->set('cat','-5');}
return $query; }
add_filter('pre_get_posts','removeFromHome');

Теперь и на странице /page/2 и на следующих страницах записи рубрики с ID 5 будут показываться. Аналогичным способом можно исключить показ записей рубрики не только с главной страницы. Например, для исключения записей рубрики из страницы результатов поиска вам надо поменять is_home наis_search. Для исключения нескольких рубрик перечислите их ID через запятую, то есть ‘-5,-6,-7’ и т.д.

Что если нам не надо исключать записи рубрик из блога, но надо исключить их из RSS ленты? Используем тот же самый код:

function removeFromFeed($query) {
if ($query->is_feed)
	{$query->set('cat','-5');}
return $query; }
add_filter('pre_get_posts','removeFromFeed');

И вашей ленте не будут присутствовать записи из указанной рубрики. Если надо совместить удаление записей рубрики и из главной страницы и из фида используйте что-то типа:

function removeCat($query) {
if ($query->is_feed || ($query->is_home && !(is_paged()))) 
	{$query->set('cat','-5,-34');}
return $query; }
add_filter('pre_get_posts','removeCat');

Данный код удалит записи рубрик с ID 5 и 34 и из RSS ленты и из главной страницы блога, но будет их показывать, если главная страница сменилась на/page/2 и следующие, образованные постраничной навигацией.

 

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

<?php get_archives('postbypost', 5); ?>

на что-то типа:

<?php $recent = new WP_Query("showposts=5"); while($recent->have_posts()) : $recent->the_post();?>    
<li><a href='<?php the_permalink(); ? rel="nofollow">' title='<?php the_title(); ?>'><?php the_title(); ?></a></li>
<?php endwhile; ?>

Leave a Reply

Your email address will not be published. Required fields are marked *