Фільтр статей за категоріями 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'.
Тепер код працює, як хотілося.

(Всього відвідувачів: 1 403, сьогодні: 1)

Lt;?
Php query_posts (array ( 'cat' => -1, -5));?
Php while (have_posts ()): the_post (); ?
Php query_posts (array ( 'cat' => -1, 'paged' => get_query_var ( 'paged')));?
Php while (have_posts ()): the_post (); ?