Как исключить показ новостей из категории на главной странице?

Сегодня рассмотрим еще одну полезную настройку, которую можно организовать в WordPress, а именно вывод категории WordPress на главной странице блога. Бывает такие ситуации, когда не хотелось бы отображать статьи из определенных категорий на главной, например, если это проданная статья, за публикацию которой вы получили деньги (про способы монетизации блога я уже неоднократно писал). А если вы просто хотите выводить определенную категорию WordPress, допустим новости, а другие чтобы отображались в виде ссылок или анонсов в сайдбаре? Опять же на помощь придет скрытие определенных рубрик!

Категории WordPress при помощи плагина

Как всегда, мы применим два способа. Разумеется, мы не первые, кому понадобилась данная настройка, поэтому уже существует весьма неплохой плагин, позволяющий легко реализовать задуманное — Exclude Category. После установки заходим простенькие настройки и отмечаем, какие именно категории не нужно выводить на главной странице блога. Также плагин позволяет удалить эти категории одновременно и из RSS ленты.

Вывод категорий WordPress своими руками

И второй способ — сделать все своими руками. Ничего сложного здесь также нет. Единственное неудобство, это то, что если захотите поменять эти категории, то придется подправлять код в шаблоне.

Вариант 1.

Открываем файл functions.php и добавляем код:

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

Данный пример удалит с главной страницы блога все новости из категории с ID=1. Как узнать ID категории я уже писал в одной из статей. Для исключения нескольких рубрик прописываем их аналогично через запятую: «-1, -2, -3». Если вы хотите удалить только с главной, а нас остальных оставить, то используем вот этот код:

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

Для удаления записей рубрики одновременно и из RSS ленты пишем так:

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





А вот так со страницы с результатами поиска:

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

Вариант 2.

Второй способ вывода новостей из определенной категории будет заключаться в исправлении кода шаблона главной страницы. Здесь мы будем перечислять не те категории, из которых надо исключить записи, а наоборот, категории для вывода на главную. Открываем файл index.php или его аналог (в зависимости от темы), где используется цикл вывода новостей loop. И после строки

<?php while ( have_posts() ) : the_post(); ?>

Добавляем новое условие, которое отобразит только новости из перечисленных рубрик:

<?php if ( !in_category('2,3,4,5') ) continue; ?>

Соответственно, новости из других категорий WordPress, кроме перечисленных (2,3,4,5), отображаться не будут.

Вариант 3.

И еще один способ, также исключающий записи из конкретных рубрик. Опять находим в цикле loop строку

<?php while ( have_posts() ) : the_post(); ?>

и перед ней вставляем код, запрещающий показ записей из категории «1».

<? global $query_string; query_posts($query_string . "&cat=-1"); ?>

Вот такие разнообразные способы, решающие одну и ту же задачу — вывод новостей из той или иной категории WordPress на главной странице блога. Пользуйтесь!

Поделись этой статьей с друзьями!

Это будет интересно прочитать:

Комментариев: 4

  • Цитаты :»про способы монетизации блога я уже неоднократно писал»
    «Как узнать ID категории я уже писал в одной из статей»
    Не сочтите за наглость, но я бы в этих местах дал ссылку на эти статьи.

  • Добрый день. Я использую в файле index.php следующую конструкцию

    if (have_posts()) :
    $post = $posts[0]; // Hack. Set $post so that the_date() works.
    if(is_category()){
    echo…
    }else{ query_posts($query_string.’&cat=3,4,5′);
    echo ‘ ‘;
    }
    while (have_posts()) : the_post();…
    Но вот подскажите, я хочу иметь ссылку, по которой будут доступны все записи из всех категорий. Как сделать?
    Заранее спасибо.

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

Добавить комментарий