Начал отвечать на один из комментариев о цикле loop в WordPress и решил, что это тема выходит за рамки ответа на комментарий. Этот пост может стать полезен новечкам и тем кто еще плохо понимает как работает Цикл вывода записей в WordPress.
Что такое цикл the loop в WordPress?
Начну с того, что говорить, - "цикл loop" — это неправильно. Это тоже самое, что сказать, - "цикл цикл", т.е. loop = цикл — повторяющееся действие. Правильно говорить просто "Цикл WordPress". Далее в тексте "Цикл WordPress" — тоже самое, что "loop", "the loop" и даже "цикл the loop WordPress".
Итак, цикл в WordPress выглядит так:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<!-- здесь формирование вывода постов, -->
<!-- где работают теги шаблона относящиеся к the loop -->
<?php endwhile; ?>
<?php endif; ?>
Однако у цикла WordPress (так называемого the loop) могут быть и другие обличья, например он может выглядеть еще и так:
<?php
global $post;
$myposts = get_posts('numberposts=5&offset=1&category=1');
foreach($myposts as $post){
setup_postdata($post);
?>
<!-- здесь формирование вывода постов, -->
<!-- где работают теги шаблона относящиеся к the loop -->
<?php } ?>
Если давать какое-то общее определение циклу в WordPress, то я бы сказал так: the loop - это цикл который перебирает массив содержащий в себе информацию о постах и во время перебора выводит информацию о каждом посте, при этом в цикле используются специальные для него теги шаблона (функции).
Вся информация о посте хранится в переменной $post. Предположим, что цикл обрабатывает массив содержащий в себе данные 10-ти постов, тогда у цикла будет 10 повторений и 10-раз будет меняться переменная $post, и при каждом повторении с переменной $post будет считываться информация о посте и выводится на экран, через теги шаблона. Также любой PHP или HTML код помещеный в цикл WordPress будет повторятся пока работает цикл: 10 итераций цикла - 10 повторений.
Типичный пример такого цикла это вывод постов на странице категорий, меток, на главной странице WordPress.
Для чего нужно различать цикл WordPress?
Понимать где используется цикл нужно, потому что в WordPress есть определенные теги шаблона, которые не работают за пределами цикла, например: the_title(), the_content(), the_excerpt() и т.д. Для того, чтобы каждая такая функция (тег шаблона) сработала, должна быть определена переменная $post, которая за пределами цикла WordPress не известна (точнее не корректна, если цикл запускался, то $post известна - она содержит данные последнего, обработаного в цикле, поста, но это уже другая тема).
Полноценный пример цикла
Приведу пример цикла WordPress (взял из Кодекса), со встроенными в код комментариями (внутри <!-- -->)
<!-- Начало цикла. -->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- Здесь уже определилась переменная $post, -->
<!-- на основе которой будет строится дальнейший код. -->
<!-- $post будет меняться для каждого поста while( have_posts() ). -->
<!-- $post нужна, чтобы работали теги шаблона: in_category('3'), the_permalink() и т.д. -->
<!-- Проверка находится ли этот пост в категории 3. -->
<!-- Если да, то задаем CSS класс div-у class="post-cat-three". -->
<!-- Если нет, то класс будет post class="post". -->
<?php if ( in_category('3') ) { ?>
<div class="post-cat-three">
<?php } else { ?>
<div class="post">
<?php } ?>
<!-- Выводим заголовок поста, как ссылку на сам пост. -->
<h2><a href="<?php the_permalink() ?>" title="Ссылка на: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Выводим дату поста и ссылку на другие записи автора. -->
<small><?php the_time('F jS, Y') ?> Автор: <?php the_author_posts_link() ?></small>
<!-- Выводим текст поста в теге div. -->
<div class="entry">
<?php the_content(); ?>
</div>
<!-- Выводим категории поста, через запятую. -->
<p class="postmetadata">Расположено в <?php the_category(', '); ?></p>
</div> <!-- закрываем основной тег div -->
<!-- Отсюда цикл начинает повторятся, если есть еще посты -->
<!-- Останавливаем цикл (endwhile), -->
<!-- если цикл не сработал (else), выводим сообщение. -->
<?php endwhile; else: ?>
<p>Нет постов в цикле.</p>
<!-- Полное окончание цикла. -->
<?php endif; ?>
if ( have_posts()
- Предыдущие по меткам
- Предыдущие записи
- Файл шаблона functions.php в WordPress ← 6.Окт.2010 // 21
- Автоматическое растягивание поля (textarea) комментария (версия 2) ← 18 Июль 2010 // 24
- Если не работает пагинация на странице поиска ← 16 Июль 2010 // 2
- Функция вывода записей по количеству просмотров ← 5 Июль 2010 // 124

Йомайо... о.О
Наконец-то я начинаю хоть что-то понимать в том, как работают программные коды WordPress!
Спасибо!
Нет, о Вашем блоге должен узнать каждый блоговод, это однозначно
Иду пиарить в Тви. Пока в Тви. У себя чуть позже.
Отличный пост. К нему можно спокойно новичков отсылать.
Спасибо!
Для новичков и писал. Делился, так сказать, своими скромными знаниями
не стоит скромничать. описано очень хорошо и доступно...
кстати, а что за форма комментов используэться? может плагин какой-то?
Нет, это не плагин
В форме комментов используется jquery-comment-preview (плагин Dimox'a), правда я и его поковырял немного. А в остальном, плоды моих трудов 
Мне очень понравилось просто. Не хочешь оформить как плагин? я думаю, многие были бы блаодарны
Думаю, нет. Не совсем представляю такую форму в виде плагина.
Kama, спасибо, отличная статья.
Хоть я это уже и так понимала на уровне интуиции, но ты так хорошо объяснил, что теперь буду понимать осознанно.
Кстати, не мог бы ты поделиться скриптом формы для комментариев - очень понравилась.
Форма комментирования - часть шаблона. Поделится не получится, потому что это не один, не два и даже не три файла.
может быть мой вопрос не совсем в эту тему, но всё же: в
я вызываю архив вот таким вот образом
<?php wp_get_archives('type=monthly'); ?>а как мне вызвать категории и теги ?
вот вроде нашёл у Вас
<?php the_category(', '); ?></p>но пока только одна категория, а как все? А теги?
ура! я нашёл
грамотно всё у Вас разжёвано тут. Многое становиться понятно. Вот нашёл и для тегов необходимую строчку
<?php wp_tag_cloud('smallest=15&largest=40&number=50&orderby=count'); ?>Короче, так) Нашла я мануал на тему: как создать свой виджет так, чтобы в него можно было воткнуть ПХП-код (сцыль: cyber-promo.ru/archives/1849). Всё вроде бы просто и понятно, да только предлагаемый юзером код, будучи вставленным в function.php, приводит к падению админки.
В том шаблоне, который я сейчас ковыряю, function.php начинается с
и заканчивается
это и есть цикл the loop, верно? Все твои функции вставляются между.
А вот с той функцией что по ссылке я не справилась. Я было решила, что надо просто удалить входящие в неё
но блог всё равно падает.
(нужен смайлик, где юзер бьёт себя по лбу, изображая дурака, — это как раз про меня).
Тут какая-то хитрость, но я не понимаю.. э?..