Как исключить записи и категории с главной страницы блога WordPress, rss ленты, результатов поиска, архивов и категорий!

Автор: Рустам Борисов
Рубрика: Создание сайта
Опубликовано:
14 Фев 2013
просмотров: 22126

Приветствую уважаемые друзья! Сегодня я расскажу Вам о том, как исключить записи (отдельные посты), категории, ссылки, метки с главной страницы вашего блога или сайта, как исключить их из фида и результатов поиска по блогу, из архивов и категорий. Сделать это можно будет как по отдельности, так и сразу вместе, в комплексе.

Как исключить записи с главной страницы блога WordPress, rss ленты, результатов поиска, архивов и категорий!
То есть в итоге мы получим небольшой и простенький кусочек кода, который по нашему желанию будет исключать те статьи, которые мы по каким-либо причинам не хотим показывать всем посетителям блога, а хотим, к примеру показать только отдельной группе людей. Такой пост можно поставить под пароль и раздавать его за подписку…

По моему пошаговому руководству любой из вас сможет реализовать эту функцию на своем блоге WordPress, без применения каких-либо плагинов, то бишь на скорость загрузки это ни как не повлияет.

Ну что ж, начнем! Нам нужен блог на движке WordPress, нам нужно немножко желания и умение копировать фрагмент текста из одного документа и вставлять его в другой документ. smile Все это у Вас есть! тогда поехали…

Данную задачу можно решить несколькими способами:

  • С помощью внесения не большого фрагмента кода в файл functions.php (поговорим о нем);
  • С помощью более сложного перепрограммирования кода шаблона (такие мануалы я не пишу, это не формат моего блога);
  • С помощью плагина «Simply Exclude» (о нем я расскажу в конце)

Итак, давайте предположим, что вы написали какой-то пост и не хотите, что бы он отображался на главной странице блога. Значит, делаем мы следующее:

  1. Открываем файл functions.php
  2. Заходим в админку (консоль) движка WordPress и слева в меню «Внешний вид» выбираем пункт «Редактор»
    Как открыть файл functions.php и редактировать через консоль блога!
    Справа, в списке всех шаблонов вашей темы, выбираете шаблон «Функции темы», то есть нажимаете на него! У вас он может называться по другому, но это не важно, смотрите что бы под названием шаблона было указано что это именно файл (functions.php), в скобках!

    exclude-post-cat-02-1 exclude-post-cat-arrow

    После чего, слева, в поле редактора откроется выбранный нами документ. Как видите, редактировать файлы шаблона вашего блога можно и через саму консоль движка WordPress, если вы привыкли пользоваться своим бесплатным html php редактором, то пожалуйста. Но здесь я рассказал о способе редактирования, которым может воспользоваться абсолютно каждый. Таким образом мы не используем соединение с сервером по ftp.

    Итак, теперь вверху документа, сразу после открывающего тега <?php вставляем наш код, который и будет выполнять функцию фильтра отдельных статей или даже целых рубрик:
    Куда вставить код исключения постов на главной в файле functions.php
    Вставить код можно и в самом конце документа, перед закрывающим тегом php блока ?> Комментарий необходим лишь для того что бы подсказать вам для чего служит данный код //comments

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

2. А теперь каждый код по порядку (как исключить записи):

Код исключения записей (постов) с главной страницы сайта по ID

function exclude_post($query) {
if ($query->is_home)
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

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

Код исключения записей (постов) из rss фида WordPress блога по ID

function exclude_post($query) {
if ($query->is_feed)
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

А вот уже с помощью этого варианта кода я покажу вам как исключить записи из rss фида вашего блога. Для чего это нужно? Да очень просто, таким не замысловатым способом вы можете задерживать публикацию новой статьи в фиде, соответственно она не будет разослана сервисом feedburner подписчикам и не будет доступна к просмотру программами читалками, rss агрегаторами. Все это нужно лишь на тот случай, если вы беспокоитесь о воровстве вашего контента через rss.

Дело в том, что у некоторых сайтов скорость индексации очень высокая, а у вашего молодого блога, она может достигать нескольких дней. Злые человечки не по брезгуют содрать у вас вашу кровную статейку и разместить у себя. У них эта статья сразу попадет в индекс, а на вашем блоге она будет считаться плагиатом. Также без тиц10 вы не сможете заранее обезопасить себя от такого рода несправедливости.

Существуют и специальные плагины, которые способны задерживать на определенное время публикацию статьи в фиде! В любом случае использовать эту функцию или нет — решать вам. Мне как-то раз понадобилось написать небольшой пост для узкого круга людей, я исключил его с главной и из фида, затем и вовсе снял с публикации и удалил. В принципе была задача и я ее решил таким способом!

Копируете код, вставляете в самый верх файла functions.php, указываете id поста и готово!

Как не выводить записи на страницах архива или категории по ID

function exclude_post($query) {
if ($query->is_archive)
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

Для удаления постов из категорий, необходимо лишь поменять is_archive на is_category

Идем дальше. Следующий код предназначен для исключения записи (поста) блога из результатов поиска.

Как исключить записи (посты) из результатов поиска по блогу по ID

function exclude_post($query) {
if ($query->is_search)
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

Как это будет работать, например с поиском от Яндекса или Google поиском я не проверял. Позже я по работаю над этим и сделаю небольшой апдейт поста, либо напишу в комментах. Я знаю лишь что отлично будет работать со стандартной функцией поиска движка WordPress. У вас у всех виджет такой есть — «Поиск по Блогу»!

Как исключить пост с главной, rss фида и результатов поиска сразу по ID

function exclude_post($query) {
if ($query->is_feed || ($query->is_home || ($query->is_search)))
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

Ну вот, отлично! Только что еще раз все проверил, каждый код великолепно выполняет свою работу. Последний вариант кода исключает любой пост, id которого вы подставите, исключает с главной страницы вашего блога (ленты анонсов статей), rss ленты (фида) и результатов поиска по блогу!

Самый первый код убирал пост только из одного места, а именно — с главной страницы (ленты анонсов статей). Если вам нужен код, который будет исключать ваш пост только из каких-либо двух мест блога, то он будет выглядеть следующим образом:

function exclude_post($query) {
if ($query->is_feed || ($query->is_home))
    {$query->set('post__not_in', array(1146, 1199) );} // id записи (поста)
return $query; }
add_filter('pre_get_posts','exclude_post');

Вам по желанию, нужно будет только менять следующие переменные во второй строке, те что в скобках — is_feed is_home is_search is_archive is_category

Если что-то не понятно, спрашивайте!

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

Друзья, я изо всех сил стараюсь писать так что бы было понятно каждому, что бы все без исключения могли подобрать тот вариант кода, который им нужен и применить у себя на сайте. Поэтому мне пришлось пойти по очень длинному пути, я не учу вас как самостоятельно продумать и написать такой код, я вам его даю уже готовым, только бери, вставляй и пользуйся!

3. Следующий цикл вариантов кода (исключение категорий):

Варианты исключения категорий с главной, фида и поиска по ID

Точно таким же образом мы можем исключать (убирать) с главной страницы, из фида и поиска, целые категории (рубрики), то есть, все посты которые относятся к какой-то определенной категории, по их ID.

Как исключить категорию с главной сраницы Блога WordPress
function exclude_cat($query) {
 if ($query->is_home)
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');
Как исключить категорию из rss ленты (фида) Блога WordPress
function exclude_cat($query) {
 if ($query->is_feed)
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');
Как не показывать категорию в архивах статей блога
function exclude_cat($query) {
 if ($query->is_archive)
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');
Как исключить категорию из результатов поиска по Блогу WordPress
function exclude_cat($query) {
 if ($query->is_search)
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');
Как исключить категорию из rss ленты, главной страницы и результатов поиска
function exclude_cat($query) {
 if ($query->is_feed || ($query->is_home || ($query->is_search)))
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');
Как исключить категорию с главной и фида Блога WordPress
function exclude_cat($query) {
 if ($query->is_feed || ($query->is_home))
       {$query->set('cat','-3, -5, -7');} // id категории
return $query; }
add_filter('pre_get_posts','exclude_cat');

Чаще всего, скрывают отдельную категорию для того что бы писать в нее рекламные посты и отделить их от общей массы контента!

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

Если вы будете их скрывать вручную, вам необходимо лишь перейти на вкладку «Все записи» в консоли блога и поочередно наводить на них курсором, смотреть id и вставлять их в код. Несколько тысяч айдишников конечно заметно увеличат код, но даже такой он будет гораздо проще чем код всего плагина, который к тому же еще и использует Базу данных.

На этом, с категориями мы закончим и перейдем к следующей части нашей работы.

4. Заключительная часть нашего практического руководства (исключение по тегу, исключение плагином):

Как исключить записи (удалить) с определенным тегом с главной, фида (rss ленты) и результатов поиска по его ID

Для этого мы будем использовать следующий код:

function exclude_post($query) {
    if ($query->is_home) {
        $tags = array('3', '7', '13'); // id тегов
        $query->set('tag_not_in', $tags);}
     return $query;}
add_filter('pre_get_posts','exclude_post');

Такой образец исключит статью отовсюду сразу:

function exclude_post($query) {
    if ($query->is_feed || ($query->is_home || ($query->is_search)))
{$tags = array('3', '7', '13'); // id тегов
        $query->set('tag_not_in', $tags);}
     return $query;}
add_filter('pre_get_posts','exclude_post');

Для того что бы исключать только из фида или только из результатов поиска, в первый вариант кода, во второй строке, подставляйте уже знакомые вам значения is_feed is_home is_search is_archive is_category

Еще один полезный момент! Вы можете добавить несколько различных вариантов кода в файл functions.php и закомментировать те, которыми пользоваться не собираетесь.

Рассмотрим на примере:

Выделяем нужный фрагмент кода → жмем правую кнопку мышки и выбираем → «Комментировать блок» → /*код*/ (выполнено в текстовом редакторе PHP Expert Editor 4.3)

Как закомментировать код который вы пока что не хотите использовать!

На примере программы Notepad plus plus:

Как закомментировать код с помощью программы Notepad plus plus

Я рассказал вам о том как не выводить отдельные записи и целые категории на главной странице блога, в фиде, архивах, категориях и результатах поиска по блогу, с помощью простого кода. Но также стоит дать решение этой задачи с помощью простенького плагина Simply Exclude.

Simply Exclude — с помощью этого плагина вы сможете отключать записи, категории, метки, ссылки, у него очень удобная интеграция! Вот, посмотрите сами:

Плагин исключения постов и категорий с главной страницы блога WordPress!

Нстройки там практически ни какой не требуется, вы можете найти плагин Simply Exclude через поиск плагинов в консоли блога, установить и активировать. Все, можно пользоваться, напротив списка статей, рубрик, меток и т.д. вы обнаружите удобные чекбоксы!

На этом все! С праздником Всех Влюбленных! Любите своих половинок, родителей и блоги! Мужики, дарите чаще своим женщинам цветы, неожиданно!

Кстати, мой Блог получил Pr1, Google.ru — спасибо! Блог — Поздравляю тебя!

Если вам понравилась статья, о том «Как исключить записи и категории» поделитесь ей с друзьями! Спасибо за внимание, пока!

С уважением, Борисов Рустам.

Подпишись на обновления!
  1. razbirishka

    Может и выйдет когда-нибудь у нас осилить ваши уроки. )) Спасибо.

  2. Анатолий

    Спасибо, Рустам.
    Полезная информация. [good]

  3. Сергей

    Спасибо! Мне, конечно, до этого ещё далеко, но на заметку возьму обязательно

  4. Рустам Борисов

    Всем пожалуйста! Пригодится когда-нибудь! :)

  5. Галина

    Доброго времени суток Вам Рустам!!! Прочитала статью,она явно для меня написана. Спасибо и низкий вам поклон!!! :)

  6. Рустам Борисов

    Сегодня заметил что моя статья заняла первую позицию в топе по запросу «Как исключить записи»!

    Прежде, после публикации она находилась на 17 позиции по данному запросу и на 28 позиции по запросу «Как исключить записи и категории» [present] :)

  7. Владимир

    Ну ты Рустам молодца. Беру взакладки [good]

    • Рустам Борисов

      Спасибо Владимир! Очень приятно слышать такие слова! :)

  8. Андрей

    Рустам. Запамятовал, где смотреть id конкретной записи?

    • Рустам Борисов

      Заходите в консоль → записи → все записи — наводите курсор мышки на название записи и браузер вам покажет внизу ссылку, эта ссылка будет содержать id поста!

  9. Татьяна

    А если записи просто присвоить статус «черновик»

    • Рустам Борисов

      Тогда запись будет снята с публикации, да, если запись по каким-то причинам стала совершенно не актуальна, если вы хотите полностью ее убрать с сайта, тогда просто меняете статус на «Черновик» и затем если нужно удаляете ее.

      Но, здесь я описал способы как исключить запись из ленты постов главной страницы, из результатов поиска по блогу, из rss ленты (фида), из ленты постов на страницах категорий и страницах архивов, то есть по сути статья опубликована, но ни кому кроме роботов не видна. Можно и индексацию данной записи запретить через файл robots.txt если понадобится! Тогда ее и в выдаче не будет, что исключит возможность перехода на нее из поисковых систем.

      Вы можете закрыть такой пост паролем и раздавать только определенной группе подписчиков, это к примеру! ;-)

  10. razbirishka

    Где новые статьи? Мы ждем. ;-)

    • Рустам Борисов

      Пишу, но муза ко мне редко приходит! :)

  11. Alex

    Добрый день, мне необходимо убирать некоторые посты создаваемые пользователями в категории. Есть ли решение, что бы передавать в эту функцию номер поста переменной? Я так понимаю этот код работает только в function.php, в произвольном файле работать не будет.

    • Рустам Борисов

      Привет Alex! Напиши мне на почту подробно, посмотрю что можно сделать! Не обещаю быстро.

  12. Степан

    А как можно исключить категорию из архива, но при этом оставить доступной по ссылке? Если вставлять код исключения то рубрика пропадает из архива, но по ссылке перейти в нее тоже нельзя(

  13. Кузнецов

    Рустам, спасибо. Исчерпывающая статья. Все подробно расписали. Остановился для себя на плагине. Просто и удобно. Если с плагином что-то случится — буду знать что у Вас можно найти как руками все убрать.

    • Рустам Борисов

      Виктор, пожалуйста!

  14. робот Отик

    Рустам, я пробовал ставить плагины WP Hide Post, и который вы рекомендуете Simply Exclude
    Не убирают записи с блога. Думаю дело в том, что в плагинах указано не выводить статьи на главной странице в блоге.
    Но у меня главная статическая стр. в вордпрессе.
    Но если в блоге главная стр. эта та, где выводятся все записи, у меня блог по другому пути выводится — uotika.ru/otika-blog
    Думаю плагины выводят записи, т.к ориентир на главную стр. а у меня надо НЕ выводить записи уже не на главной — а на блоге.
    Вот если бы в плагине указать этот путь не на главную стр. а на блог — то думаю бы нормально стало бы работать.
    Только где прописать в плагинах и как я не знаю.

    Если просто код прописать как вы мне рекомендуете (Код исключения записей (постов) с главной страницы сайта по ID)
    Там тоже думаю нужно дать ориентир не на главную, а на мой блог, именно там не нужно мне выводить записи.
    Вот код который вы рекомендуете вставить.
    function exclude_post($query) {
    if ($query->is_home)
    {$query->set(‘post__not_in’, array(1146, 1199) );} // id записи (поста)
    return $query; }
    add_filter(‘pre_get_posts’,’exclude_post’);

    is_home — Думаю указывает на домашнюю страницу (главную)
    Где мне внести изменения и что нужно прописать, чтобы было указано в коде, что НЕ выводить записи нужно на отика блоге (uotika.ru/otika-blog)

    • Рустам Борисов

      Отик, я давненько не проверял работу скрипта, но судя по тому что у меня как раз спрятаны несколько постов из ленты анонсов на главной и несколько постов из фида и их не видно — скрипт отлично работает, обновления cms никак не повлияли! :)

  15. робот Отик

    А нет…
    Ничего менять не надо.
    Как вы писали, так и надо ставить. Работает!
    Получилось.
    Спасибо большое Рустам.
    Я думал надо изменить путь, т.к плагины не убирали статьи.

    • Рустам Борисов

      Пожалуйста! :)

  16. робот Отик

    А можно перед кодом, написать к примеру
    Этот код убирает статьи с главной.
    Этот код убирает записи с рсс

    Такие строки пояснения не будут мешать норм. работе сайта?

    • Рустам Борисов

      Можно после кода, не будут мешать, это комментарии, напишите после двух слешей:

      //код убирает статьи с главной
      //код убирает статьи из категории
      //код убирает статьи из rss фида

      Поместите код скрипта в редактор с подсветкой синтаксиса, например Notepad++, напишите комментарий в том месте где вам удобно и увидите как он его слегка затемняет! Но имейте ввиду что это однострочный комментарий!

  17. […] Статья о том, как это реализовать, здесь. […]

  18. Валерий

    Спасибо за полезную статью. Один вопрос, а как узнать ID рубрики? [:-|]

  19. Фёдор

    Здравствуйте. Я только осваиваю wordpress, и весьма полезной является возможность фильтровать вывод постов на главную страницу. Использую фильтрацию по его ID (то о чём у Вас в п.4) – таким образом запись не отображается на главной странице. Но у записи есть комментарии, и они появляются в ленте новых комментариев. Подскажите, пожалуйста, как убрать из ленты новых комментариев (фильтровать) комментарии конкретной записи? (то есть, чтобы на главной странице не появлялись комментарии к отфильтрованной записи, но продолжали появляться остальные «последние комментарии»)?

  20. Гена

    Здравствуйте! Бьюсь который день, не могу решить эту проблему. По вашему способу — не получается, эта родительская рубрика, которая дублируется с подрубриками и дублируется на главной (Оборудование и принадлежности). Пробовал и плагином — не выходит.

Оставить свой комментарий
:) :-D ;-) :-| [star] [good] [flower] [present] [:-))] [:))] [:--_)] [:-|]

Subscribe without commenting