Если представить тему WordPress как тело, то Главный цикл (The Loop) — это его сердце. Именно он отвечает за самое главное: обработку и вывод записей (постов) вашего сайта на страницу. Без него вы увидите лишь пустоту.
Эта статья научит вас понимать, как работает The Loop, и использовать его ключевые функции для вывода заголовка, контента и другой информации о записях.
1. Что такое Главный цикл (The Loop)?
The Loop — это основной механизм в WordPress, который проверяет, есть ли в базе данных записи для отображения на текущей странице (главной, категории, отдельной записи и т.д.). Если записи есть, он загружает их данные по одной, позволяя вам форматировать и выводить их с помощью специальных функций.
Проще говоря, это цикл while
, который работает по принципу: «Пока есть записи, отображай их».
2. Базовая структура Главного цикла
Вот как выглядит минимальная, но полноценная структура Главного цикла. Его обычно размещают в файле темы index.php
, single.php
, archive.php
или в любом другом шаблоне, где нужно вывести список постов.
<!-- Здесь, внутри цикла, мы выводим содержимое каждой записи -->
<h2><?php the_title(); ?></h2>
<div class="content">
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<!-- Этот блок выполнится, если записей не найдено -->
<p>Записей не найдено.</p>
Давайте разберем этот код по шагам.
3. Детальный разбор кода и ключевых функций
Шаг 1: Проверка на наличие записей — have_posts()
php
<?php if ( have_posts() ) : ?>
- Функция
have_posts()
проверяет, есть ли в текущем запросе (например, записи в категории, которую открыл пользователь) какие-либо посты для отображения. - Она возвращает
true
, если посты есть, иfalse
, если их нет. - Эта проверка запускает весь процесс.
Шаг 2: Запуск цикла — while ( have_posts() ) : the_post();
php
<?php while ( have_posts() ) : the_post(); ?>
Это самая важная строка. Здесь происходит следующее:
while ( have_posts() )
— Циклwhile
будет продолжаться до тех пор, пока функцияhave_posts()
возвращаетtrue
.the_post();
— На каждой итерации цикла эта функция переключается на следующую запись в результате запроса. Ее критически важно вызывать, так как она:- Устанавливает глобальные переменные (как
$post
). - Делает доступными для использования все те функции вывода, которые мы рассмотрим ниже (
the_title()
,the_content()
и др.). Безthe_post()
эти функции ничего не будут знать о текущей записи.
- Устанавливает глобальные переменные (как
Шаг 3: Вывод данных текущей записи (внутри цикла)
Внутри цикла вы можете использовать множество функций WordPress для вывода информации о текущей записи. Они работают только после вызова the_post()
.
<?php the_title(); ?>
- Что делает: Выводит заголовок текущей записи.
- Частый вариант использования: Обернуть в ссылку на полную запись.
<?php the_content(); ?>
- Что делает: Выводит полное содержимое записи. В отличие от
the_excerpt()
, он показывает весь текст, включая все HTML-теги и разделитель<!--more-->
. - Важно: Используется преимущественно на странице самой записи (
single.php
).
- Что делает: Выводит полное содержимое записи. В отличие от
<?php the_excerpt(); ?>
- Что делает: Выводит краткое описание (анонс) записи. WordPress автоматически обрезает текст до ~55 слов и добавляет многоточие в конце. Идеально для архивов, категорий и главной страницы.
<?php the_permalink(); ?>
- Что делает: Возвращает URL (ссылку) на полную версию текущей записи. Сама по себе не выводит ссылку, а только возвращает ее. Поэтому используется внутри HTML-тега
<a href="">
.
- Что делает: Возвращает URL (ссылку) на полную версию текущей записи. Сама по себе не выводит ссылку, а только возвращает ее. Поэтому используется внутри HTML-тега
- Мета-данные:
<?php the_author(); ?>
,<?php the_date(); ?>
,<?php the_category(); ?>
- Что делают: Выводят имя автора, дату публикации и список категорий записи соответственно.
- Пример использования:
<?php the_post_thumbnail(); ?>
- Что делает: Выводит миниатюру (изображение записи), если она установлена.
Шаг 4: Завершение цикла — endwhile; endif;
<?php endwhile; ?>
<?php else : ?>
<p>Записей не найдено.</p>
<?php endif; ?>
endwhile;
— закрывает циклwhile
.else :
— это часть условияif
. Код внутри этого блока выполнится, еслиhave_posts()
вернулfalse
(записей для отображения нет).endif;
— окончательно завершает условный оператор.
4. Полный практический пример
Вот как может выглядеть типичный вывод записи в цикле для блога (например, в index.php
).
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<!-- Заголовок записи как ссылка -->
<h2 class="entry-title">
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php the_title(); ?>
</a>
</h2>
<!-- Мета-данные: Дата и автор -->
<div class="entry-meta">
<time datetime="<?php echo get_the_date('c'); ?>"><?php the_date(); ?></time>
<span class="author">Автор: <?php the_author(); ?></span>
</div>
<!-- Миниатюра записи -->
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php the_post_thumbnail('medium'); ?>
</a>
<?php endif; ?>
<!-- Краткое содержание записи -->
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<!-- Ссылка "Читать далее" -->
<a href="<?php the_permalink(); ?>" class="read-more">Читать далее »</a>
</article>
<?php endwhile; ?>
<!-- Навигация по страницам (если постов много) -->
<div class="pagination">
<?php posts_nav_link(); ?>
</div>
<?php else : ?>
<p>К сожалению, по вашему запросу ничего не найдено.</p>
<?php endif; ?>
5. Важные замечания и альтернативный синтаксис
wp_reset_postdata();
— Если вы внутри своего цикла используете пользовательские запросы (например, сWP_Query
), важно сбрасывать глобальные переменные основного цикла этой функцией после его завершения. Для стандартного Главного цикла это обычно не требуется.- Альтернативный синтаксис: Некоторые разработчики предпочитают использовать фигурные скобки. Это то же самое.php<?php if ( have_posts() ) { while ( have_posts() ) { the_post(); // … вывод содержимого } } else { echo ‘<p>Записей не найдено.</p>’; } ?>
Заключение
Вы освоили фундаментальную концепцию разработки тем WordPress — Главный цикл. Теперь вы понимаете:
- Как он работает:
if ( have_posts() )
→while ( have_posts() )
→the_post()
. - Какие функции использовать внутри:
the_title()
,the_content()
,the_excerpt()
,the_permalink()
,the_author()
,the_date()
,the_category()
. - Где его размещать: в основных файлах шаблонов вашей темы.
Потренируйтесь! Создайте простую тему, поэкспериментируйте с выводом разных данных внутри цикла, и вы очень быстро научитесь управлять отображением контента на вашем сайте.