wordpress 3.x Как не выводить рубрики на главной. Решение

picИногда удобно не выводить на главной своего блога некоторые рубрики. К примеру профильное направление в этом блоге – компьютеры и прочее для начинающих. С другой стороны иногда хочется поделиться и чем-нибудь из другой тематики. Раньше это было просто, но, начиная с версии 3.x перестало работать.

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

Заходим в директорию текущей темы. Например,
/domains/ваш_домен/public_html/wp-content/themes/default/
и ищем там файл functions.php

Редактируем его добавляя следующие строки:

function exclude_category($query) {
if ( $query->is_feed or $query->is_home ) {
$query->set('category__not_in', array(8,52,59,60,72,74));}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Таким образом ни в rss ни на главную посты с этими рубриками не попадут.

Если в rss они должны попасть, а на главную – нет, код будет вот таким:

function exclude_category($query) {
if ( $query->is_home ) {
$query->set('category__not_in', array(8,52,59,60,72,74));}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Как узнать номера категорий? У меня они 8,52,59,60,72,74

Очень просто. Идём вот по такой ссылке: http://ваш_блог/wp-admin/edit-tags.php?taxonomy=category
logo

Наводим мышь на категорию (рубрику) и смотрим в статусной строке номерок. В случае примера это 74.

Или заходим в управление рубриками, и кликаем на “изменить”. Вверху в адресной строке, вы найдёте необходимую вам цифру.

Т.е. если я напишу код вот так:

function exclude_category($query) {
if ( $query->is_feed or $query->is_home ) {
$query->set('category__not_in', array(74));}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

то ни один пост с рубрикой “Мои Разработки” не попадёт ни на главную страницу ни в rss.

Если есть вопросы – спрашивайте.

UPD: Еще вариант:

function removeFromHome($query) {
if ($query->is_feed || ($query->is_home && !(is_paged())))
	{$query->set('cat','-8,-52,-59,-60,-72,-74');}
return $query; }
add_filter('pre_get_posts','removeFromHome');
  • Татьяна Бодрова

    спасибо

    • На здоровье :) Рад быть полезным

  • Websaiter

     А как сделать чтобы только несколько рубрик выводились на главной а остальные нет? 

    • Попробуй вместо 
      $query->set(‘category__not_in’, array(74));} 

      написать 
      $query->set(‘category__in’, array(74));}  

      Должна показываться только 74 категория

      Я сейчас уже не помню, если не получится, вечером маякни, вспомню и напишу пример

      • Websaiter

        Прикольно, а мне жена говорила вместо set поставить get и чтото ещё попробовать))) И не надо вечером маячить, =С=П=А=С==И=Б=О … !!! 

        • На здоровье :) Обращайся если что – чем могу, помогу :)

  • arms

    Спасибо :) Очень помогло. И главное нашлось легко ;)

    • Ну вот и здорово :)

  • Сергей Варданян

    В Wordpres 3.3.1  это не сработало, возможно в теме есть какие то закорючки. весь интернет перелазил, пробовал плагины: exclude_category, advanced-category-excluder, simply-exclude  тоже без результата. Единственное что помогло это добавления  в теме в файл  index.php код   добавлять код нужно после     Вот это помогло) до этого дня два умчался.

    • В wordpress 3.3.1 это точно работает ибо это используется, например, здесь у меня в блоге :)

      Я дкмаю вам стоит поискать в разных файлах, на предмет add_filter(‘pre_get_posts’, ‘exclude_category’);
      возможно регистрируется несколько фильтров. Должен быть один.

    • Попробуй добавить вот такой код (категории смени на свои и не забудь минус):
      function removeFromHome($query) {if ($query->is_feed || ($query->is_home && !(is_paged())))  {$query->set(‘cat’,’-8,-52,-59,-60,-72,-74′);}return $query; }add_filter(‘pre_get_posts’,’removeFromHome’);

  • Сергей Варданян

    В Wordpres 3.3.1  это не сработало, возможно в теме есть какие то закорючки. весь интернет перелазил, пробовал плагины: exclude_category, advanced-category-excluder, simply-exclude  тоже без результата. Единственное что помогло это добавления  в теме в файл  index.php код  query_posts(‘cat=-1,-3,-5,-7’);   добавлять код нужно после php if (have_posts())     Вот это помогло) до этого дня два умчался.

    • см ответ выше (и добавил в пост в самый конец UPD)
      Это точно работает. А менять index.php ну совсем неправильно :)

  • Cmotp10

    А как сделать, что бы выводило только заданные категории на главной? вариант с заменой category__not_in на category__in сработал, но куда то пропало меню главное. Есть более корректный вариант?
     

    • Вариант корректный :) Темы бывают не совсем корректные :) Надо разбираться как именно там у тебя организовано меню и почему оно пропадает от такой функции.

      Попробуй с функцией removeFromHome (из UPD поста)

      • Cmotp10

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

        • ну если ОЧЕНЬ надо – упакуй мне тему (или дай ссылку откуда скачать) – посмотрю. Не зная деталей – точно не смогу помочь. Мы можем тут неделями гадать :)

          • Cmotp10

             отправил ссылку на скачивание… проверяется модератором

        • Это был я с другого аккаунта :) 

          • Cmotp10

             http://www.web2feel.com/tiara/ вот эта тема.

            Моя задача, из конкретных категорий выводить записи на главную. остальные не показывать. Так как какие будут остальные я не знаю, и каждый раз ковырять какие ставить а какие нет- это будет гиморойно, но тоже решение :)

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

              • Cmotp10

                спасибо. да, такие там присутствуют.
                доброй ночи

                • Попробуй временно попробовать назначить им (пунктам меню) только категории из белого списка. Если поможет – маякни, чтобы я не разбирался зря.

  • timur

    После запрета вывода какой либо из рубрик на главной, пропадает постраничная навигация, как с этим бороться?

  • Vadim

    то, что я искал!

    • рад был помочь :)

  • LehanXXX

    Не работает у меня,версия вродпресс 3.1.Вроде всё делаю правильно,но блин не фига не выходит.Пол интернета облазил,но не в какую.Очень надеюсь на вашу помощь.Если надо могу скинуть тему.

    • сбрось тему на мэйл из http://vdasus.com/about/ в выходные посмотрю

  • Антон

    Всё работает корректно. У меня wp 3.4.1 Спасибо!!!
    Могу сделать для Вашего сайта уникальный счётчик статистики совершенно бесплатно, в качестве благодарности.
    Например такой как у меня на сайте: http://vip-comp911.ru если заинтересовало пишите мне на почту

    • Да этих счетчиков хоть… Я понимаю зачем этот комментарий ;) ну да ладно, пусть себе висит…

  • Alex Frolow

    Уважаемый, большое спасибо… а можно ли указать код, что бы на главной НЕ выводилось конкретный пост.. по номеру ID ??
    Спасибо !!

    • тут можно проще, мне кажется. Назначить этому посту рубрику, которую отметить как “не выводить на главной”

  • Прохожий

    Спасибо большое, простой и действенный способ. 3 плагина перебрал — ни черта не работает. Надо учить PHP.

    • Обращайтесь если что :) На здоровьичко

  • Вадим

    Спасибо большое! А то плагины у меня на http://www.you-author.com не работают )) Выводились сплошные ошибки на странице сайта. Не хотелось выводить свои наброски на главную. Кстати, а записи, которые не выводятся индексируются?

    • ну пусть повисит :)

      • Вадим

        Уважаемый мастер, вы не сказали, индексируются такие спрятанные записи или нет? Спасибо.

        • Теоретически индексируется любая запись до которой можно добраться не вводя пароля и если это напрямую не запрещено. В идеале ещё хорошо бы создавать sitemap (например плагином Google XML Sitemaps http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/ – тогда боты будут быстрее находить страницы для индексации.

          Скажем так – любая открытая страница будет проиндексирована. А вот насколько быстро это произойдёт зависит от конкретного сайта – как он структурирован, если ли категории, тэги, рубрики, как это всё размещено, быстро ли находится с главной страницы, создан ли sitemap и т.д.

          • Вадим

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

  • Татьяна Саксон

    Спасибочки. Так все хорошо сразу получилось!

    • На здоровье :)