Особенности циклов WordPress

Циклы являются сердцем WordPress – они содержатся в любом файле шаблона используемой темы. Без циклов тема потеряла бы большинство своих функциональных возможностей.

Некоторые теги шаблона работают только в пределах цикла, что вы увидите в дальнейшем, при разборе примеров.

Основной цикл

Если вы желаете создавать качественные, многофункциональные сайты на основе WordPress, то просто обязаны понимать структуру и применение циклов. Остановимся на рассмотрении базового цикла, поскольку он представляется наиболее легким для понимания. Начинается он командой:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

и заканчивается:

<?php endwhile; else: ?>
<p>Some error message or similar.</p>
<?php endif; ?>

Фактически, часть, отвечающая за вывод сообщения об ошибке, может быть опущена, поскольку обработка ошибочных результатов имеется практически во всех файлах шаблона.

В файле index.php большинства тем присутствует следующий цикл (или похожий на него), отвечающий за вывод содержимого записи:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<div id="post- <h2><a href="<?php
the_permalink(); ?>" title="<?php the_title(); ?>"><?php
the_title();?></a></h2>

<?php the_content(); ?>

<?php get_comments(); ?>

</div>

<?php endwhile; else: ?>

<div>

<h2>Error!</h2>

<p>Something went wrong! Please try again.</p>

</div>

<?php endif; ?>

Основной цикл проверяет, существуют ли записи для отображения на экране; если таковые существуют, он выводит их на экран в соответствии с некоторыми основными настройками блога (количество записей для вывода и т.д.). Также в цикле ведется проверка, на какой из страниц пользователь в данный момент находится. Если пользователь выбрал отдельную запись, то она будет представлена в соответствии со всеми имеющимися настройками и стилевым оформлением. То же самое относится и к списку рубрик, и к любым другим имеющимся элементам блога.

Цикл while будет работать до тех пор, пока не выведет все отвечающие поставленным требованиям записи. Если таковых записей не осталось, цикл заканчивается конструкцией endwhile. Базовый цикл заканчивается конструкцией endif.

Если записей, подходящих под критерии, не существует, цикл переходит на ветвь else, в которой обычно выводится сообщение об ошибке. После вывода сообщения цикл заканчивает свою работу.

Таким образом, циклы берут информацию из базы данных WordPress, опираясь на имеющиеся настройки блога и определенные критерии, и влияют на отображение страницы.

Несколько слов о WP_Query

WP_Query является основой всех существующих в WordPress циклов. Этот класс, подчас незримый для обычного пользователя, участвует в обработке любого цикла. Отыскать его можно в файле wp-includes/query.php. Подробное объяснение всех методов и свойств WP_Query можно получить на странице кодекса: codex.wordpress.org/Function_Reference/WP_Query, здесь же мы кратко попробуем остановиться на его основных особенностях.

Основной цикл WordPress базируется на WP_Query, или, если быть более точным, он использует заданный по умолчанию объект $wp_query. Если в файле темы встречаются, к примеру, теги have_posts () и the_post (), то на самом деле они опираются на $wp_query -> have_posts () и $wp_query -> the_post () соответственно. В случае создания своих собственных запросов, не имеющих стандартных аналогов в WP_Query, вам придется создать отдельный объект. Пример:

<?php $brand_new_query = new WP_Query(); ?>

Вместо стандартного $wp_query мы загружаем новый объект $brand_new_query, позволяющий нам проводить необходимые действия за пределами основного цикла.

Шаблоны и условные теги, а также большинство других элементов WordPress в своей работе используют класс WP_Query. Этот класс, естественно, можно редактировать и подстраивать под себя, добиваясь какого-либо необычного результата взаимодействия, однако данной возможностью пользуются лишь профессионалы.