Убираем рубрики с главной страницы вордпресс

 Приветствую!

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

Существует несколько сопособов для исключения показов записей из определённой рубрики на главной странице вашего сайта-блога. Один из самых простых, на мой взгляд, способов — это добавить небольшой кусочек кода в файл  functions.php. Этот кусочек кода будет своеобразным фильтром, который избавит нас от необходимости изменять другие файлы темы. С помощью этого метода не нужно тратить время на переделку цикла вывода записей в файле index.php через query_posts.

Итак, рассмотрим на примере:

1) Допустим нам нужно удалить записи с рубрики, идентификационный номер которой равен 4, то есть ID=4. Другими словами, нам нужно исключить показ записей рубрики, ID которой равен 4, с главной страницы.

2) С задачами определились, приступаем к реализации — для этого добавим в файл functions.php следующий кусочек кода:

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

ГОТОВО!

Сохраняем нами измененный файл functions.php и видим, что на главной странице больше нет записей из рубрики ID=4.

С точки зрения логики Вордпресс, главная страница — это также и любая другая страница, которая образована постраничной навигацией. Таким образом, посты из исключённой рубрики ID=4, мы не увидим на странице 2, 3 или 4 и так далее.

Если такой вариант не подходит, то можно немножко изменить приведённый выше код на такой:

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

Сохраняем и теперь на каждой странице, кроме главной, записи из рубрики с ID=4 будут нормально отображаться.

Исключение записей рубрики из результатов поиска

Если у вас возникла необходимость исключения записей рубрики со страницы результатов поиска, то нужно всего лишь поменять is_home на is_search.

Для исключения записей нескольких рубрик, нужно перечислить ID этих рубрик через запятую в указанных выше кодах. Допустим, нужно исключить рубрики, ID которых 3,7,8,9. Тогда в коде будут такие изменения:

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

 Исключение записей рубрики из RSS ленты

Как же поступить, если нужно исключить записи определённой рубрики из вашей RSS ленты? А поступить можно очень просто —  используем код ниже:

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

Сохраняем изменения и видим, что в ленте больше нет записей с ненужной нам рубрики.

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

Если вдруг вам нужно сделать так, чтобы на главной странице и в ленте не отображались записи с определённой рубрики, то нужно использовать следующий код:

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

В этом случае записи рубрик, ID которых равен 3, не будут показываться на главной странице и в RSS ленте, но будут показываться при открытии других страниц.

Если вы не знаете как узнать ID рубрики, то перейдите сюда — получаем ID рубрики.

Изменения в файл  functions.php можно вносить в любое место, но не касаясь кода другой функции. Проще всего — дописать код в конце файла.

13 комментариев

  1. Замечу, что каждый следующий параметр прописывается внутри предыдущего через 2 вертикальных черты и находится в своих скобках. То есть, посмотрев на предыдущий код увидите, что второе условие для главной страницы заключено в свои скобки и находится внутри общих скобок, которые оборачивают первое условие для категорий.

  2. Добрый день! Нужно убрать записи одной из рубрик с главной страницы. Вставляю Ваш код - записи пропадают. Но вместе с ними пропадает и постраничная нумерация. Удаляю код - снова можно выбирать номера страницы на главной. Пробовала ставить другие подобные коды - то же самое. Может быть Вы подскажете, в чём проблема? Спасибо за ответ.

    • Возможно у вас используется другой цикл вывода записей - вот и возникают конфликты. Файл homme.php или front.php - есть такое у вас?

    • Нет ни того, ни другого

    • Хорошо, а как выводятся посты? Выложите сюда код page.php

    • Видимо, код целиком не вставился, а я не обратила внимания. Если можно, напишите мне на электронную почту

  3. {$query->set(
    'cat','-1001,-
    1002,-1003,-1004,-1005,
    -1006,-1007,-1008,-1009,-
    1010,-1011,-1012,-1013,-1014,-1
    015,-1016,-1017,-1018');} - не очень сим
    патично, да? ) Вот и спросил, может можно вот так: {$query->set('cat','-1001-1018');}, ну, или как-то по другому?

    • Ааа... вон оно что). Извините, я просто не понял Вашего вопроса.
      По-моему по-другому нельзя сделать, то есть указать диапазон. Сколько гуглил - ничего по этому поводу не нашёл.

  4. А если у рубрик последовательная нумерация, их можно как-то сгруппировать?

    • Если разобраться - сделать можно практически всё))

    • спасибо, просто исчерпывающий ответ...)

    • Ну... какой вопрос - такой и ответ). Что именно вы подразумевали под группировкой? Ведь особой разницы нет - последовательная нумерация у рубрик или в разброс)

Оставить комментарий

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