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

Ну что, продолжим извращаться с темами?

Query Posts

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

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

Вы наверное знаете о существовании стандартного виджета, который выполняет эту функцию, а что если хочется вывести список записей в каком-то другом месте?

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

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

Совсем чуть-чуть усложним задачу — будем выводить 5 последних постов из категории с ID 2.

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

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

Допустим существует некая категория (для примера с ID = 3), посты которой не хочется выводить на главной, для этого мы мановением чудо символа «-» (минус) убираем её из выдачи.

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

Думаю вы оценили прелесть этой небольшой, но мощной функции 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 колонки — в одной список категорий фильмов, а во второй — просто рубрики. Я посоветовал ему завести две большие рубрики и раскидать существующие в них как дочерние. После чего предложил вставить в шаблон следующий код:

, где 12345 — ID родительской рубрики (т.е. в нашем примере Download)
Но при выводе таким образом, перед списком выдавался заголовок c именем родительской рубрики, а её хотелось указать отдельно руками. Копаем кодекс дальше.

По идее мы должны получить список, но без заголовка, а на деле мы получаем пустой список с надписью «Нет рубрик». Странно? Да не то слово, но если почитать ещё немного в кодексе по поводу синтаксиса и параметров wp_list_categories, то находим такую строку

If the parameter (child_of) is used, the hide_empty parameter is set to false.

, т.е. параметр hide_empty (который разрешает или запрещает показывать рубрики, если в них нет постов) автоматически должен переключиться в режим — показывать всё, но увы и ах, это «переключение» по какой-то причине происходит только в случае, когда кроме child_of нет других параметров. И вот вам итоговый вариант скрипта, выводящего все дочерние категории для выбранной нами:


Этот пост оказался несколько больше, чем я изначально предполагал, но надеюсь он не потерял своей полезности. Поэтому то, о чём планировал рассказать (произвольные поля, карта сайта и т.д.) переносится в третью часть.
Не забудьте подписаться на rss, теперь я даже обзавёлся огромной кнопкой в сайдбаре, так что не промахнётесь.

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

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

    Допустим существует некая категория (для примера с ID = 3), посты которой не хочется выводить на главной, для этого мы мановением чудо символа «-» (минус) убираем её из выдачи.

    Как я понимаю, на запись все равно можно будет попасть по пермалинку, так?

  2. Skech, это делается просто, здесь есть солюшен по выводу постов определённой категории, его вставляешь в шаблон, данный шаблон применяешь к странице…

    а у меня проблема в другом (: после данных действий is_page() отдаёт false, т.е. после таких действий он (ВП) не считает Page пейджем (:

    естьу кого-нить соображения на этот счёт?

  3. >order — порядок сортировки по дате, принимает значения ASK — от старых к новым или DESC — от новых к старым (стоит по умолчанию).

    Долго я не понимал почему не работает order=ask
    Правильное значение asc

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