Содержание
Приветствую!
Сегодня статья о том, как можно вручную, без использования плагинов, исключить рубрики с главной страницы сайта на Вордпрессе.
Существует несколько сопособов для исключения показов записей из определённой рубрики на главной странице вашего сайта-блога. Один из самых простых, на мой взгляд, способов — это добавить небольшой кусочек кода в файл 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 можно вносить в любое место, но не касаясь кода другой функции. Проще всего — дописать код в конце файла.
Замечу, что каждый следующий параметр прописывается внутри предыдущего через 2 вертикальных черты и находится в своих скобках. То есть, посмотрев на предыдущий код увидите, что второе условие для главной страницы заключено в свои скобки и находится внутри общих скобок, которые оборачивают первое условие для категорий.
Добрый день! Нужно убрать записи одной из рубрик с главной страницы. Вставляю Ваш код - записи пропадают. Но вместе с ними пропадает и постраничная нумерация. Удаляю код - снова можно выбирать номера страницы на главной. Пробовала ставить другие подобные коды - то же самое. Может быть Вы подскажете, в чём проблема? Спасибо за ответ.
Возможно у вас используется другой цикл вывода записей - вот и возникают конфликты. Файл homme.php или front.php - есть такое у вас?
Нет ни того, ни другого
Хорошо, а как выводятся посты? Выложите сюда код page.php
Видимо, код целиком не вставился, а я не обратила внимания. Если можно, напишите мне на электронную почту
{$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');}, ну, или как-то по другому?
Ааа... вон оно что). Извините, я просто не понял Вашего вопроса.
По-моему по-другому нельзя сделать, то есть указать диапазон. Сколько гуглил - ничего по этому поводу не нашёл.
А если у рубрик последовательная нумерация, их можно как-то сгруппировать?
Если разобраться - сделать можно практически всё))
спасибо, просто исчерпывающий ответ...)
Ну... какой вопрос - такой и ответ). Что именно вы подразумевали под группировкой? Ведь особой разницы нет - последовательная нумерация у рубрик или в разброс)