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

#76, 24 июня, 2011 в 11:11
Как узнать ид рубрики?
#77, 20 июля, 2011 в 11:23
не работает
#78, 20 июля, 2011 в 17:40
Может подскажете как исправить ?
#79, 14 августа, 2011 в 23:48
а как сделать чтобы на главной отображалась нужная рубрика а дальше другие
#80, 30 августа, 2011 в 00:47
я прописал первый код в функции, сохранил - обновляю страничку и все записи исчезли.. использую тему твенти тен
#81, 31 августа, 2011 в 18:09
Расцеловал бы прямо таки - ахуительное решение!
#82, 7 сентября, 2011 в 10:05
Здравствуйте прошу помочь!!! Тема Mistique при добавлении в файл functions.php код для запрещения вывода некоторых рубрик сайт "падает"
#83, 20 сентября, 2011 в 22:11
Спасибо за инфу, ответ нашел на этом сайте, помучился с этим. автору респект
#84, 27 сентября, 2011 в 10:31
Молодца! Давно искал подобное решение, плагинов полно, но все они тяжелые, а здесь все просто и понятно!
#85, 6 октября, 2011 в 16:49
Я хочу поинтересоваться: возможно ли поместить страницу в выпадающее меню, которое отображает рубрики сайта. То есть в главном меню отображаются несколько страниц: Главная, О сайте, Фото, Работы.
Работы в свою очередь раскрываются и показывают рубрики работ: Сайты, Логотипы итд. Необходимо в это меню запихать статичную страницу Фото, чтобы она показывалась наравне с другими рубриками. Версия WP 2.8
Спасибо.
#86, 7 октября, 2011 в 14:03
Добрый день. Подскажите пожалуйста, а можно как то вообще убрать вывод записей на главной?
#87, 26 декабря, 2011 в 16:05
Спасибо за решение :))
#88, 11 января, 2012 в 11:46
Спасибо все получилось Версия 3.3.1
#89, 2 февраля, 2012 в 21:51
Люди в версиях 3.1 используется этот код:
function exclude_category($query) {
if ( $query->is_feed or $query->is_home ) {
$query->set('category__not_in', array(5));
}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');