Исключение рубрик с главной страницы
Способов исключения показа записей определенной рубрики на главной странице блога несколько. Больше всего мне нравится метод с добавлением своего фильтра в файл 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 и следующие, образованные постраничной навигацией.
Рекомендую также:

#1, 6 сентября, 2009 в 13:48
Спасибо, это более элегантное решение, чем query_posts().
#2, 6 сентября, 2009 в 17:49
кстати, пока не забыл. если вы используете вывод последних постов в сайдбаре, то вам надо заменить код:
на что-то типа:
пишу тут, потому что лень статью редактировать.
#3, 12 сентября, 2009 в 11:22
О.. наконец-то они исчезли... :)
На лиекс статьи это не повлияет?
Спс!
#4, 12 сентября, 2009 в 11:54
если на них есть другие ссылки в вашем блоге, то не повлияет.
#5, 4 октября, 2009 в 22:32
На 2.6 ведь должен работать этот прием? У меня после правки кода просто прекращается вывод страниц (любых)
#6, 5 октября, 2009 в 06:53
должен работать и на версии 2.6
#7, 11 октября, 2009 в 17:18
спасибо. очень помогло.
#8, 19 октября, 2009 в 23:48
Но как сделать, чтобы в сайдбаре всё-таки ссылка на пост оставалась? А то если убрать пост с главной, то и на главной в сайдбаре ссылка на пост не отображается =(
#9, 22 октября, 2009 в 13:09
использовать в сайдбаре код:
на этот код никакие исключения рубрик не действуют, по крайней мере, если перед ним не стоит query запрос с исключением.
#10, 19 ноября, 2009 в 17:18
Спасибо! Всё работает
#11, 12 декабря, 2009 в 22:26
Спасибо, очень помогло в моём случае :)
#12, 9 февраля, 2010 в 05:24
Здраствуйте!
Подскажите пожалуйста, а как убрать рубрику из меню? Что-бы она вообще не отображалась ни в верхней строчке, ни в боковой. С wp я только знакомлюсь и php то-же пока еще темный лес... Если можно - подскажите поподробнее!
Заранее спасибо. А.
#13, 9 февраля, 2010 в 05:40
при использовании виджетов я не знаю, просто виджетами не пользуюсь. но если у вас используется код в шаблоне для вывода рубрик, то убрать вывод какой-то одной рубрики легко, откройте файлы header.php или sidebar.php и найдите там функцию wp_list_categories и вот в ней надо добавить параметр &exclude=5, где 5 это ID скрываемой рубрики. то есть полностью функция будет выглядеть как-то так:
#14, 9 февраля, 2010 в 05:48
Спасибо! Получилось! Вы - чудо! Чмок!
#15, 20 февраля, 2010 в 23:49
Надо было полдня потратить на "поиск лошадки в чужом коде (хех не прогер я, а новичок), что бы потом найти у вас на сайте такое элегантное решение! (это которое номер2)
Wielki dzięki!
#16, 9 марта, 2010 в 22:04
Спасибо тебе дружище!! пол дня думал как это реализовать!! а тут всё так просто!!
#17, 17 марта, 2010 в 09:20
спасибо, пригодилась эта фишка...
#18, 18 марта, 2010 в 18:59
подскажите пожалуйста чайнику, а куда именно в файл фанкшн вставляется этот блок?
#19, 19 марта, 2010 в 02:34
абсолютно в любое место между служебными символами:
но естественно, что не стоит код впихивать посередине другой функции, просто перед самым концом файла вставьте код и все.
#20, 19 марта, 2010 в 07:16
Flector, спасибо!
Все заработало.
#21, 19 марта, 2010 в 14:00
Отличная статья! А от я думал, что можно и стандартными средствами исключить страницы с главной...
#22, 19 марта, 2010 в 23:45
я все сделал как надо, но на строке add_filter('pre_get_posts','removeCat'); идет фатал ерор... ошибка так как неизвестная функция add_filter
#23, 19 марта, 2010 в 23:55
точный текст ошибки? и какая версия wp у вас?
#24, 20 марта, 2010 в 00:17
а, все, нашел плагин для скрытия рубрик) довольно таки не плохой! вот ссылка
#25, 20 марта, 2010 в 00:19
версия 2.9.2
точно не скажу, но точно ссылался фатал ерор на add_filter
Так вот в чем вопрос, зачем морочиться в коде скрипта, ели можно плагин этот поставить?)
#26, 20 марта, 2010 в 00:49
плагин делает абсолютно тоже самое, что и этот код - просто посмотрите его содержимое и сами убедитесь. только вот любой плагин в админке вордпресса увеличивает расход памяти для всего блога, а код в functions.php нет - в этом основное различие.
#27, 20 марта, 2010 в 01:12
тогда почему у меня не знает функции add_filter? и это как я помню не первый случай когда что то не работает когда я все правильно сделал при редактировании какого элемента кода скрипта...
#28, 20 марта, 2010 в 01:14
уверены? выложите куда-нибудь свой functions.php - я взгляну.
#29, 3 апреля, 2010 в 14:59
spawn у меня этот плагин все рубрики похавал, из 19 только 3 осталось, хотя в настройках указал только 1 прятать
#30, 4 апреля, 2010 в 12:15
Поставил, все прекрасно работает... Статьи от Liex не выводятся на главной.
#31, 6 апреля, 2010 в 16:28
спасибо! отличное решение )
#32, 21 апреля, 2010 в 14:12
Спасибо. Искал нечто подобное. Хорошо что не надо плагин подключать.
Просто и понятно.
А то ввел категорию юмор, на сайте а она не совсем по теме, у меня сайт по бизнесу.
Теперь будет порядок. Не будет винигрета на главной!
#33, 20 мая, 2010 в 00:22
На одном сайте работает, на втором почему-то статья не отображается не только на главной, но и в самой рубрике... В чём может быть проблема?
#34, 27 мая, 2010 в 00:24
Спасибо! Очень нужная функция. Коротко и понятно.
#35, 10 августа, 2010 в 10:32
Подскажите пожалуйста а как сделать так, чтобы исключить только один определенный пост из рубрики на главной?
#36, 23 августа, 2010 в 20:52
как узнать ID ?
я поставил плагин что ссылки исправляет и ID не видно
#37, 28 августа, 2010 в 18:10
ооо, спасибо. Один день искал сам, топом 1 час подбирал запрос по которому могу найти свою проблему в гугле. Ещё раз спасибо)))