Извращения с темами 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, теперь я даже обзавёлся огромной кнопкой в сайдбаре, так что не промахнётесь.

Из той же оперы, так что прочти обязательно:

Метки: , , , , , , , ,

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

  1. Дмитрий Королев пишет:

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

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

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

  2. Tapac пишет:

    Да. Они исключается только из выдачи в списке на определенной странице, а физически продолжает существовать.

  3. Skech пишет:

    А как сделать чтобы страница соответствовала рубрике? Т.е. чтобы при переходе на страницу выводились посты, определённой категории.

  4. Feelov пишет:

    Продолжение - мать учения :) Юмор типа!

  5. Frenzy пишет:

    Респект!
    Нереально интересная серия статей, т.к. на русском языке вообще информации мало. Все ждут продолжений )

  6. SunShine пишет:

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

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

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

  7. SunShine пишет:

    решил передачей через
    $GLOBALS["true_page"]=is_page();

    …query_posts…

    if globals["true_page"] - разые действия

    но это помоему изврыщение…

  8. Maga-GT пишет:

    Крассавчик, не думал что найду. вывод определенного количества записей нужен был,!!!!ееееее

  9. Maga-GT пишет:

    не подскажешь, а как создать 1 главную рубоику, и кней еше привязать дочерние. в админ не такой возможности

  10. Tapac пишет:

    Как же нет? При добавлении рубрики всегда можно выбрать Родительскую, если делать это не через “Создание поста”, а Управление > Рубрики

  11. Александр пишет:

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

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

  12. Григорий пишет:

    спасибо. будем извращацца

  13. Григорий пишет:

    пойдет статейка

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

Вы должны войти чтобы оставить комментарий.