Фильтр статей по категориям wordpress без плагинов

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

Фильтр статей по категориям wordpress без плагинов

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

Есть замечательная функция в wordpress, которая изменяет стандартный запрос при прохождении циклом по базе. Это функция query_posts(), она принимает очень много параметров, влияющих на запрос, и как следствие вывод записей на страницу. Мне нужно указать категорию которую не нужно выводить. Для этих целей есть несколько вариантов:

  • параметр category__not_in — записи, не входящие в указанную категорию;
  • параметр cat — id категории.

Выберу ту что короче.

Запишем функцию для нашего случая:

query_posts( array( ‘cat’ => -1));

Указывать значения рубрик, которые не будут входить в вывод нужно через запятую. Располагаете этот код выше цикла wordpress на главной странице «index.php» и записи из указанных категорий выводится не будут.

<?php query_posts( array( 'cat' => -1, -5 ) );?>
<?php while ( have_posts() ) : the_post(); ?>

Этот код отфильтрует категории 1 и 5, которые не будут выводится на главной странице.
Запускаем, проверяем.

Все работает — записи указанных категорий в выводе не обнаружены. Но есть одно НО!

Внизу страницы под записями находится постраничная навигация. В админ-панели можно ограничить количество выводимых записей на странице, и чтоб увидеть остальные записи придется воспользоваться этой навигацией. Только не вышло у меня этого сделать, кликаю по ссылкам навигации, а статьи все те-же. Начался квест, в финале которого приз — решение проблемы с постраничной навигацией. Я сразу не догадался от чего такое поведение. Часа два поисков и оказывается этот самый вызов функции query_posts(), причина такого поведения постраничной навигации. Но мне очень нужно убрать из вывода категории со справочной информацией и … Квест продолжается.

Долго ли, коротко ли…. Думал уже отложить поиск решения. Как зацепился за параметр ‘paged’. Он отвечает за постраничную навигацию и для нормализации работы навигации нужно задать этому параметру значение get_query_var( ‘paged’ ), что указывает на текущий номер страницы в постраничной навигации.

В итоге получаем функцию, которая переопределяет 2 параметра:

<?php query_posts( array( 'cat' => -1, 'paged' => get_query_var('paged') ) );?>
<?php while ( have_posts() ) : the_post(); ?>

Закрываем для вывода первую категорию и задаем параметр ‘paged’.
Теперь код работает, как хотелось.

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

Оставьте свой комментарий