Несколько примеров использования query_posts

Несколько примеров использования query_posts
Бывают случаи когда на главную (или какую нибудь другую) страницу нужно вывести записи только из определенной категории, или вообще только определенные записи. Для этого в WordPress и существует query_posts.

Теперь немножко подробнее - для вывода записей в WordPress используется цикл, называемый "The Loop". Обычно он выглядит так:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
//Тут Ваш код
<?php endwhile; ?>

Если перед циклом "The Loop" поставить функцию query_posts с нужными нам параметрами, то мы добьемся нужного нам результата. Вот пример такого использования:

<?php query_posts('cat=-1,-2,-3'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
//Тут Ваш код
<?php endwhile; ?>

Такой код выведет на главную записи из всех категорий кроме категорий с ID 1, 2 и 3.

Ниже преведены еще несколько примеров использования query_posts:
query_posts('cat=-3') - Не показывать категорию id которой равно 3;
query_posts('cat=-1,-2,-3') - Не показывать категории, id которых равны 1, 2 и 3;
query_posts('cat=2,6,17') - Вывести категории с id равным 2, 6 и 17;
query_posts('category_name=WordPress') - Вывести категорию с названием “WordPress”;
query_posts('name=Hello World') - Вывести один пост с названием “Hello World”;
query_posts('p=5') - Вывести один пост, id которого равно 5;
query_posts('page_id=7') - Вывести страницу id которой равно 7;
query_posts('pagename=about') - Вывести страницу с названием “about”;
query_posts('cat=18&showposts=5') - Вывести 5 постов из категории с id=18;
query_posts('cat=3&orderby=date&order=ASC') - Вывести посты из категории id которой равно 3, сортировать по дате в хронологическом порядке(DESC - в обратном порядке);
query_posts('posts_per_page=10') - Вывести 10 постов на страницу (при значении -1 выводит все посты);
query_posts('cat=3&year=2008') - Вывести посты из категории с id=3 за 2008 год;
query_posts('orderby=rand&showposts=3&cat=3') - выводин рандомно, т.е. случайно 3 записи из 3 категории;
query_posts('orderby=rand&showposts=3') - выводит случайно 3 записи из всех категорий;
query_posts('meta_key=cars&meta_value=volvo') - выводит список постов с произвольным полем “cars” и значением этого поля volvo.

Если возникнут какие нибудь вопросы, то обязательно спрашивайте 😉

Подробное описание функции query_posts смотрите здесь.

Предыдущие записи из рубрики `Настройка WordPress`

48 комментариев

Antoha, 28.07.2009 в 14:05

Подскажите плиз, а как можно вывести записи с определенной меткой, а также выводить все записи кроме записей с определенной меткой.

ОтветитьОтветить
Deimos, 28.07.2009 в 14:22

Antoha вот пример как вывести записи с метками "плагины" и "шаблоны":
а как не выводить записи с метками "плагины" и "шаблоны" я не знаю, надо подумать-почитать, просто минус не получается 🙁
Со вставкой ID тоже фокус не прокатывает, теги только с именем правильно работают.
Если кто знает напишите, мне тоже было бы интересно 😉

ОтветитьОтветить
Antoha, 28.07.2009 в 14:55

Спасибо что откликнулись так быстро (достаточно редко получаешь ответ за 17минут).

ОтветитьОтветить
Deimos, 28.07.2009 в 15:03

Всегда пожалуйста, если будут еще вопросы - задавайте! Если смогу помочь, обязательно помогу 😉 Если способ найдете исключения записей с определенными тегами то напишите сюда, если не сложно, чтобы на будущее знать, мало ли пригодится 🙂

ОтветитьОтветить
t1mm1, 19.08.2009 в 11:31

Есть вопрос.
Есть несколько категорий.
Как вывести посты, которые принадлежат только к определенным категориям? то есть вариант, когда посты принадлежат не к определенным категориям в целом, а как например.
Есть категории Страна, Город, Район. Как сделать вывод по определенной Стране/городу/Району вместе, исключая другие посты, принадлежащие другим Странам/Городам/районам? Ведь если использовать запись атрибутов Cat = n то выведет и те посты , которые могут совпадать по стране, но не погороду...

как быть тут....?

ОтветитьОтветить
Deimos, 19.08.2009 в 17:13

Так.... на сколько я понял Вы делаете нечто типа справочника? Если так то в этом случаи лучше использовать custom field для вывода компаний, а не использовать категории.... Если не для этого, то напишите подробно что и как нужно сделать, а там придумаем.....

ОтветитьОтветить
source, 02.09.2009 в 13:14

а как на странице с id3, например, вывести посты из категории с id5 ?

ОтветитьОтветить
Deimos, 03.09.2009 в 06:05

source, не совсем понял вопрос, надо именно на странице (не на записе) с id3 выводить посты из категории id5... Если так то просто в шаблон страницы, в нужное место вставьте новый цикл:
query_posts('cat=5') и проверку на id страницы.... Надо подробнее?

ОтветитьОтветить
source, 03.09.2009 в 09:33

если можно, то подробнее
у меня просто 3 страницы и возникла необходимость вывести на них сообщения из разных рубрик

я не знаю как id страницы определить

if (id_страницы)
{// далее знаю }

ОтветитьОтветить
Deimos, 03.09.2009 в 22:43

source, вроде так (сам не проверил, спать тянет, но вроде должно работать):
have_posts()) : $new_query->the_post();?>
Тут вывод цикла..... Сссылка, контент и т.д.

Этот код вставляем в шаблон страницы (page.php) - суть кода, проверяем что мы на страницы с ид3, если да то выводим 10 записей.
ИД страницы можно посмотреть в админку - просто навести на страницу мышку и посмотреть линк, в нем написан ИД.
Если возникнут проблемы - пишите, разберемся.

ОтветитьОтветить
andry, 17.09.2009 в 11:43

Скажите плз, как вывести все посты кроме постов с 18-ой категории???
Я делал так:
...
все отлично, только одно но!
На главной выводятся все правильно, а вот при переходе на ...?paged=2 , ...?paged=3, и тд., отображаются те посты что на хомяке!!!! Подскажите пожалуйста как с этим бороться!!!

ОтветитьОтветить
Deimos, 18.09.2009 в 21:54

andry, видимо код порезался =( Куда вставляли то что вы сделали в home.php или index.php?

ОтветитьОтветить
andry, 21.09.2009 в 08:28

все заработало))! у меня было так:
query_posts('&cat=-18');
а надо было так:
query_posts($query_string.'&cat=-18');

Скажите плиэ, что делает метод $query_string !!??

ОтветитьОтветить
OntLiL, 21.09.2009 в 22:46

Здравствуйте.
Не поможете мне с одной проблемой:
не получается у меня никак сделать динамическую сортировку постов по дополнительному полю. Голову уже сломал, а результата нет(
Сортировка по названию, дате, изменению без проблем работает, а по дополнительному полю никак((

ОтветитьОтветить
Deimos, 22.09.2009 в 07:46

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

ОтветитьОтветить
OntLiL, 22.09.2009 в 17:17

Сегодня наконец-то сделал эту сортировку.
Проблема, как оказалось, легко решается. В лоб, если можно так сказать.

Вся проблема решилась этой строчкой.
query_posts($query_string.'&meta_key=stoimost&orderby=meta_value&order=ASC');

ОтветитьОтветить
Deimos, 22.09.2009 в 22:36

OntLiL, вот видите как хорошо, что сделали сами 😉
А до этого что не получалось, правильно ведь сейчас все написали?!

ОтветитьОтветить
OntLiL, 23.09.2009 в 17:48

Что самое интересное не получалось.
Получилось всё только тогда, когда я с нуля создал новый шаблон. Может в темплейте был какой косяк...

ОтветитьОтветить
Deimos, 23.09.2009 в 19:42

OntLiL, может, у самого такое бывает, долбишься долбишься пару часов, потом бросаешь до утра, утром смотришь и за 2 минуты делаешь с мыслью - как же я до этого вчера не допер 😀

ОтветитьОтветить
pixel, 02.10.2009 в 18:21

Привет 🙂 Подскажи пожалуйста, если я поставлю вместо главной страницу, то уместно будет использовать то, что описано выше?

У тебя внизу есть Оповещать о новых комментариев по почте, что за плагин?

ОтветитьОтветить

Комментировать

Новые комментарии