Извращения с темами 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, теперь я даже обзавёлся огромной кнопкой в сайдбаре, так что не промахнётесь.
Из той же оперы, так что прочти обязательно:
Метки: coding, guide, howto, query_posts, template, WordPress, руководство, темы, шаблоны

23 октября 2007 в 20:00
Как я понимаю, на запись все равно можно будет попасть по пермалинку, так?
24 октября 2007 в 23:10
Да. Они исключается только из выдачи в списке на определенной странице, а физически продолжает существовать.
25 октября 2007 в 10:47
А как сделать чтобы страница соответствовала рубрике? Т.е. чтобы при переходе на страницу выводились посты, определённой категории.
26 октября 2007 в 16:24
Продолжение - мать учения
Юмор типа!
27 октября 2007 в 19:29
Респект!
Нереально интересная серия статей, т.к. на русском языке вообще информации мало. Все ждут продолжений )
6 декабря 2007 в 9:30
Skech, это делается просто, здесь есть солюшен по выводу постов определённой категории, его вставляешь в шаблон, данный шаблон применяешь к странице…
а у меня проблема в другом (: после данных действий is_page() отдаёт false, т.е. после таких действий он (ВП) не считает Page пейджем (:
естьу кого-нить соображения на этот счёт?
6 декабря 2007 в 9:42
решил передачей через
$GLOBALS["true_page"]=is_page();
…query_posts…
if globals["true_page"] - разые действия
но это помоему изврыщение…
20 января 2008 в 0:25
Крассавчик, не думал что найду. вывод определенного количества записей нужен был,!!!!ееееее
20 января 2008 в 0:58
не подскажешь, а как создать 1 главную рубоику, и кней еше привязать дочерние. в админ не такой возможности
20 января 2008 в 1:14
Как же нет? При добавлении рубрики всегда можно выбрать Родительскую, если делать это не через “Создание поста”, а Управление > Рубрики
1 апреля 2008 в 14:04
>order - порядок сортировки по дате, принимает значения ASK - от старых к новым или DESC - от новых к старым (стоит по умолчанию).
Долго я не понимал почему не работает order=ask
Правильное значение asc
3 июня 2008 в 14:23
спасибо. будем извращацца
3 июня 2008 в 14:25
пойдет статейка