Pull to refresh

Извращения с темами WordPress для новичков и не только (Часть 2) — query_posts

Reading time 4 min
Views 3.7K
Спасибо тов. curlybrace за то, что открыл глаза на существующие правила и нормативы в постинге на Хабре. Будем вникать, а пока что вторая часть статьи о WordPress и темах.

Query Posts


Хотелось ли вам самим определять какие сообщения и когда должны показываться на странице? Нет ничего проще, ведь существует чудо функция query_posts, определяющая какие записи попадут в выдачу. Функция работает как некий фильтр, отбирающий посты по указанным критериям. Сейчас всё станет более ясно на примерах, а затем я просто перечислю большинство существующих параметров, после чего всё ограничится вашим воображением.

Список последних записей


Вы наверное знаете о существовании стандартного виджета, который выполняет эту функцию, а что если хочется вывести список записей в каком-то другом месте?
<?php query_posts('showposts=5'); ?>
<ul>
  <?php while (have_posts()) : the_post(); ?>
      <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
  <?php endwhile;?>
</ul>

Как видно из кода мы передали в функцию query_posts параметр showposts равный 5. Даже не будучи особым знатоком английского языка, понятно что будут показаны 5 постов. Сортируются они по умолчанию по дате публикации — от последних к первым. the_permalink() — даёт нам ссылку на пост, а the_title() — заголовок.

N-постов из определенной рубрики


Совсем чуть-чуть усложним задачу — будем выводить 5 последних постов из категории с ID 2.
<?php query_posts('cat=2&showposts=5'); ?>
<ul>
  <?php while (have_posts()) : the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
  <?php endwhile;?>
</ul>

Всё проще простого — всего 6 знаков, а какой эффект, какой размах:-) Думаю тут пояснения не требуются, поэтому перейдём к

Исключаем записи из вывода


Допустим существует некая категория (для примера с ID = 3), посты которой не хочется выводить на главной, для этого мы мановением чудо символа "-" (минус) убираем её из выдачи.
<?php query_posts('cat=-3'); ?>
<?php while (have_posts()) : the_post(); ?>
  // тут стандартный вывод
<?php endwhile;?>


Расширяем кругозор или список доступных параметров


Думаю вы оценили прелесть этой небольшой, но мощной функции query_posts, и хотя вы всегда можете более глубоко изучить её в кодексе, я позволю себе перечислить параметры, которые могут вам пригодиться:
cat и category_name — выбор рубрики по ID или по имени, как исключить какую-то рубрику — см. выше.
Хинт: если нужно передать несколько рубрик, то не нужно несколько раз писать cat=1&cat=2, достаточно перечислить рубрики через запятую cat=1,2. Кстати говоря, этот приём относится к любому параметру, который может принимать несколько значений.
author и author_name — посты определенного автора, по ID (author=3) и имени (author_name=Tapac).
p и name — выбирает посты по id (p=5) или по короткому имени (name=this_post_slug).
page_id и pagename — тоже самое, только применительно к страницам.
showposts — сколько из отфильтрованных постов/страниц показать при выдаче.
ВременнЫе (hour, minute, second, day, monthnum, year) — посты за указанный период.
paged — параметр позволяет показывать те посты, который в обычном случае доступны при переходе по ссылкам «Предыдущая страница», т.е. paged=2 покажет посты, как если бы мы отмотали на 2 страницы в прошлое (при выводе по 10 постов на странице, мы получили бы в выдаче записи с 21 по 30).
posts_per_page — сколько постов на страницу. Хорошо группируется с предыдущим параметром.
order — порядок сортировки по дате, принимает значения ASK — от старых к новым или DESC — от новых к старым (стоит по умолчанию).
offset — т.н. отступ. Пропускает (сдвигает) на определенное количество записей.

Выводим подкатегории


В завершение сегодняшнего поста хочу поделиться трюком, который может пригодиться при использовании WordPress как CMS.
Начну из далека, постучался ко мне в icq некто vzldd (в инфо — Дмитрий) с просьбой помочь с сайтом по фильмам, а точнее он хотел разместить в правом сайдбаре 2 колонки — в одной список категорий фильмов, а во второй — просто рубрики. Я посоветовал ему завести две большие рубрики и раскидать существующие в них как дочерние. После чего предложил вставить в шаблон следующий код:
<ul>
<?php wp_list_categories('child_of=12345'); ?>
</ul>

, где 12345 — ID родительской рубрики (т.е. в нашем примере Download)
Но при выводе таким образом, перед списком выдавался заголовок c именем родительской рубрики, а её хотелось указать отдельно руками. Копаем кодекс дальше.
<ul>
<?php wp_list_categories('child_of=12345&title_li='); ?>
</ul>

По идее мы должны получить список, но без заголовка, а на деле мы получаем пустой список с надписью «Нет рубрик». Странно? Да не то слово, но если почитать ещё немного в кодексе по поводу синтаксиса и параметров wp_list_categories, то находим такую строку
«If the parameter (child_of) is used, the hide_empty parameter is set to false.»
, т.е. параметр hide_empty (который разрешает или запрещает показывать рубрики, если в них нет постов) автоматически должен переключиться в режим — показывать всё, но увы и ах, это «переключение» по какой-то причине происходит только в случае, когда кроме child_of нет других параметров. И вот вам итоговый вариант скрипта, выводящего все дочерние категории для выбранной нами:
<ul>
<?php wp_list_categories('hide_empty=0&child_of=12345&title_li='); ?>
</ul>



Оригинал статьи «Извращения с темами WordPress для новичков и не только (Часть 2) — query_posts».
Tags:
Hubs:
+4
Comments 0
Comments Leave a comment

Articles