Цикл WordPress
12.03.2019
Теги: CMS • Web-разработка • WordPress • БазаДанных • Функция • Цикл
Цикл WordPress (The Loop) — это перебор записей (постов) и вывод какой-либо информации о каждом посте. Цикл получает массив записей, перебирает этот массив и во время перебора выводит информацию о каждом посте. При этом в цикле используются специально созданные для него функции (теги шаблона): the_title()
, the_date()
, the_excerpt()
, the_content()
и т.д.
Когда говорят «Функция используется внутри Цикла WordPress» — это значит, что функцию можно использовать внутри цикла, при этом нет необходимости передавать ей параметры (указывать ей, с какой записью работать).
Например, the_title()
вызывается без параметров, но при этом функция будет выводить заголовок текущей записи в цикле. Такие функции (работающие с Циклом), работают с глобальной переменной $post
. Из этой переменной они берут данные для вывода.
<?php if (have_posts()): ?> <?php while (have_posts()): ?> <?php /* * Это обёртка для функции setup_postdata(). Функция получает следующий пост, переопределяет * глобальную переменную $post и устанавливает свойство $in_the_loop класса WP_Query в true. * Переменная $post нужна, чтобы работали теги шаблона the_title(), the_date(), the_content(). */ the_post(); ?> <h2><?php the_title(); ?></h2> <small><?php the_date(); ?></small> <div class="excerpt"> <?php the_excerpt(); ?> </div> <?php endwhile; ?> <?php else : ?> <p>Записей нет.</p> <?php endif; ?>
Обратите внимание — в стандартном Цикле мы не указываем никаких данных для выборки записей, а сразу начинаем цикл. Это говорит о том, что данные уже существуют и их нужно просто обработать и вывести на экран.
«Уже существующие» данные для каждого типа страниц создаются автоматически и сохраняются в глобальную переменную $wp_query
. WordPress заранее делает запрос к БД, на основе того, какой тип страницы сейчас отображается — категория, статья, страница. И результат этого запроса записывает в $wp_query
, а затем оттуда их можно вывести в цикле.
Но, мы можем и самостоятельно получить данные и затем вывести их в цикле:
<?php $posts = get_posts([ 'numberposts' => 10, // выбираем 10 записей рубрики 'category_name' => 'doma-iz-brusa', 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'post' ]); ?> <?php foreach ($posts as $post): ?> <?php /* * Функция устанавливает глобальные данные поста, которые нужны для использования * функций the_title(), the_date(), the_content() и т.д. */ setup_postdata($post); ?> <h2><?php the_title(); ?></h2> <small><?php the_date(); ?></small> <div class="excerpt"> <?php the_excerpt(); ?> </div> <?php endforeach; ?> <?php /* * Всегда, когда используется функция setup_postdata(), после цикла нужно сбрасывать * запрос с помощью функции wp_reset_postdata() */ wp_reset_postdata(); ?>
<?php // задаем нужные нам условия выборки данных из БД $query = new WP_Query([ 'post_type' => 'post', 'posts_per_page' => 10, // 10 постов на страницу 'orderby' => 'date', // сортировка по дате 'order' => 'DESC' // сортировка по убыванию ]); ?> <?php if ($query->have_posts()): ?> <?php while ($query->have_posts()): ?> <?php $query->the_post(); ?> <h2><?php the_title(); ?></h2> <small><?php the_date(); ?></small> <div class="excerpt"> <?php the_excerpt(); ?> </div> <?php endwhile; ?> <?php else: ?> <p>Записей нет.</p> <?php endif; ?> <?php // сбрасываем $post, возвращаем оригинальные данные wp_reset_postdata(); ?>
Поиск: CMS • Web-разработка • WordPress • База данных • Функция • Цикл • The Loop • have_posts • the_post • the_title • the_date • the_excerpt • the_content • get_posts • setup_postdata • wp_reset_postdata • WP_Query