В этой статье мы рассмотрим не одну а сразу несоклько тем по работе с циклом loop:

1) Дополнительный цикл в WordPress без разрушения основного
2) Использование более одного цикла loop на странице не дублируя посты
3) Создание своего собственного loop используя wp_query

Итак, приступим.

Дополнительный цикл в WordPress без разрушения основного

Очень часто бывает необходимость в создании дополнительного цикла на странице, где уже есть основной поток постов. Например, когда нужно вывести отдельный блок со специально отобранными постами (на английском языке такие называют featured posts).

Если просто сделать копию основного цикла, добавив нужные параметры через query_posts(), то может так получиться, что в результате «поломаются» оба цикла. Чтобы этого избежать, необходимо у второго цикла (не основного) использовать 2 дополнительные строки кода…

Собственно говоря все как всегда просто. Нужно всего лишь вместо обычного кода вывода поста:

<?php query_posts('showposts=3&cat=7) ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
...
<?php endwhile; ?>
<?php endif; ?>

Во втором случае писать такой код:

<?php $temp_query = $wp_query; ?>
<?php query_posts('showposts=3&cat=7) ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
...
<?php endwhile; ?>
<?php endif; ?>
<?php $wp_query = $temp_query; ?>

Ключевыми в данном коде являются первая и последняя строки, которые и спасают циклы от разрушения.

Использование более одного цикла loop на странице не дублируя посты

Проблема: Многие современные темы или шаблоны и все темы «magazine» используют по крайней мере два loop на главной странице блога; они могут использоваться, например, для сектора «последних постов» . В то время как возможно использовать два loop, без повторения постов, вот пара таких примеров.

Решение: 1.Давайте начнём с первого loop. Трудного тут ничего нет: мы только собираемся взять восемь последних постов, используя параметры показания постов. Откройте index.php , и вставьте код, чтобы вывести ваши «последние» посты:

<?php
query_posts('showposts=8');
$ids = array();
while (have_posts()) : the_post();
$ids[] = get_the_ID();
the_title();
the_content();
endwhile;
?>

2.Теперь пришло время применить второй loop и получить все посты, исключая те, которые мы уже вывели в первом loop:

<?php
query_posts(array('post__not_in' => $ids));
while (have_posts()) : the_post();
the_title();
the_content();
endwhile;
?>

Создание своего собственного loop используя wp_query

Проблема: Класснический loop WordPress, который чаще всего используется в шаблонах блогов, очень простой и человекопонятен. Но очень часто, особенно используя заказные loop (например, в сложных шаблонах «magazine»), вы рискуете встретиться проблемами сброса, смещения, недопустимыми тэгами и другими ошибками. Как я однажды встретился используя одну из таких тем в своём блоге.

Решение: Решение состоит в том, чтобы использовать wp_query и создать свой собственный loop:

<?php
$myPosts = new WP_Query();
$myPosts->query('showposts=5');
while ($myPosts->have_posts()) : $myPosts->the_post(); ?>
the_title();
the_content();
endwhile;
?>

Пояснение кода: Код отображает пять последних постов. Подробное описание:
Строка 2, создал новый объект WP_Query, назвал $myPosts.
Строка 3, выполнял запрос, используя параметр showposts, чтобы вывести только пять последних постов.
Строка 5, начало loop.
Строка 6 и 7, просто добавляем описание поста (заголовок и сам контент)
Строка 8, конец loop.

Если Вы хотите изменить количество отображаемых постов, просто изменить значение параметра showposts в строке 3.

h++p://wphacks.name/additional-loop-with-queryposts/
h++p://cooledit.org.ua/2009/wordpress/10-primerov-ispolzovaniya-loop-v-wordpress.html

Категория: WordPress | Теги:

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