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');

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

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

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

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

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

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

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

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

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

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

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

    2. Попробуй добавить вот такой код (категории смени на свои и не забудь минус):
      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’);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии закрыты