Основной цикл
Урок 6
Содержание
Цикл WordPress — это стандартный механизм WP, использующийся для вывода постов в теме WordPress. Цикл получает массив объектов постов, перебирает их и выводит информацию о них, даже если это страница отдельного поста.
Ниже вы найдёте подробное теоретическое руководство по циклам WordPress с примерами. Если же вам нужно больше практики, то рекомендую смотреть видеоурок.
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
В видеоуроке – при помощи цикла WordPress динамически выводим контент на странице записи:
После этого – программируем страницы блога, рубрик и меток, выводим динамически посты на них:
Также некоторые моменты я бы хотел описать текстом, не ограничиваясь видеоуроком.
Если вы взглянули уже на список уроков этого курса, то могли бы заметить, что циклы WordPress бывают двух видов:
Давайте рассмотрим отличия основного цикла от дополнительных:
Основной цикл | Дополнительные циклы |
---|---|
Сам знает, какой контент выводить на странице, на которой используется. Не имеет параметров. | В функции вывода этих циклов требуется передавать дополнительные параметры, иначе они не знают, какие посты выводить. |
Может быть только один на странице. | Может быть сколько угодно на странице. |
Простейшую запись цикла можно представить вот так:
if ( have_posts() ) : // если есть посты while ( have_posts() ) : the_post(); // то инициализируем каждый пост по порядку // выполняем код для каждого конкретного поста the_title( '<h2>', '</h2>' ); // например выводим заголовок endwhile; else: echo 'В этой категории нет записей, вероятно.'; endif;
Код выше сам по себе уже полноценно работающий, если вы вставите его в тему, то он что-то будет вам выводить в зависимости от того, на какой странице вы находитесь.
Для того, чтобы окончательно понять, как работают циклы в WordPress, рекомендую сделать следующую последовательность действий:
index.php
.Если вы перейдёте на страницу блога или в категорию, то можете заметить, что WordPress разделяет записи по страницам, причём это могут быть именно отдельные страницы с постраничной навигацией, либо подгрузка новых страниц при скролле. Потому что, если у вас сразу будут загружаться все существующие посты (а их могут быть сотни и тысячи), то браузер просто зависнет.
Если мы говорим о страницах архивов (рубрики, метки, поиск, архивы автора и т.д), то количество отображаемых за раз постов зависит от того, сколько их указано в Настройки > Чтение.
Кроме того, мы можем модифицировать это значение при помощи хука pre_get_posts
(подробнее про него тут).
add_action( 'pre_get_posts', 'true_modify_posts_per_page', 25 ); function true_modify_posts_per_page( $query ) { $query->set( 'posts_per_page', 5 ); // отображает 5 записей на странице // но мы можем изменять и многие другие параметры основного цикла }
Не знаете, куда вставлять код?
Только обратите внимание, что действие хука pre_get_posts
распространяется на все существующие циклы, в том числе и на дополнительные, поэтому вам может понадобиться условие $query->is_main_query()
или условные теги.
Иногда бывает нужно, чтобы в цикле постов – один или несколько из них выводились в другом стиле. Это также заметно и на примере темы, которую мы используем – в ней первая запись в блоге больше, чем остальные. Это можно сделать при помощи обычной паременной-счётчика и функции get_template_part().
$i = 0; while( have_posts() ) : the_post(); $i++; if( 1 === $i ) { // если первая запись, то подключаем файл entry-featured.php get_template_part( 'entry', 'featured' ); } else { // иначе подключаем обычный entry.php get_template_part( 'entry' ); } endwhile;
Список уроков