Функция rewind_posts()
в WordPress используется для перемотки основного или кастомного Цикла (The Loop) обратно в начало. Это позволяет повторно обрабатывать те же посты без повторного запроса к базе данных. Функция особенно полезна, если вы хотите дважды использовать один и тот же цикл на одной странице для вывода постов разными способами.
rewind_posts();
Параметры
Функция не принимает параметров.
Возвращает
Функция ничего не возвращает, но сбрасывает указатель цикла постов на начало.
1. Использование одного Цикла дважды на странице
Этот пример показывает, как можно использовать rewind_posts()
для того, чтобы повторно пройтись по тем же постам:
<?php
// Первый цикл
if (have_posts()) {
while (have_posts()) {
the_post();
// Выводим контент поста
the_title('<h2>', '</h2>');
the_excerpt();
}
}
?>
<!-- Некоторая разметка между циклами -->
<hr>
<?php
// Перематываем цикл в начало
rewind_posts();
// Второй цикл
if (have_posts()) {
while (have_posts()) {
the_post();
// Выводим контент поста по-другому
the_title('<h3>', '</h3>');
the_content();
}
}
?>
В этом примере мы сначала выводим заголовки и краткие описания всех постов, затем перематываем цикл и выводим полный контент тех же постов.
2. Пример с кастомным запросом WP_Query
Функция rewind_posts()
работает не только с основным циклом, но и с кастомными запросами. Рассмотрим пример с использованием класса WP_Query
:
<?php
// Кастомный запрос: получаем все посты
$args = array( 'posts_per_page' => -1 );
$custom_query = new WP_Query($args);
// Первый цикл
if ($custom_query->have_posts()) {
while ($custom_query->have_posts()) {
$custom_query->the_post();
// Выводим контент поста
the_title('<h4>', '</h4>');
the_excerpt();
}
}
?>
<!-- Разделитель -->
<hr>
<?php
// Перематываем кастомный запрос в начало
$custom_query->rewind_posts();
// Второй цикл
if ($custom_query->have_posts()) {
while ($custom_query->have_posts()) {
$custom_query->the_post();
// Выводим полный контент поста
the_title('<h5>', '</h5>');
the_content();
}
}
?>
В этом примере сначала выводятся заголовки и краткие описания всех постов, а после перемотки цикла выводится полный контент тех же записей.
3. Пример для страниц с пагинацией
Если у вас есть страница с пагинацией, и вам нужно перематывать цикл постов на каждой странице, вы можете использовать rewind_posts()
для более гибкого контроля:
<?php
// Основной цикл
if (have_posts()) {
while (have_posts()) {
the_post();
// Выводим только заголовки постов
the_title('<h2>', '</h2>');
}
}
// Пагинация
the_posts_pagination();
// Перематываем цикл
rewind_posts();
// Второй цикл
if (have_posts()) {
while (have_posts()) {
the_post();
// Выводим полный контент постов
the_content();
}
}
?>
Здесь после пагинации, которая выводит заголовки постов, цикл перематывается для вывода полного контента тех же самых записей.
Заключение
Функция rewind_posts()
позволяет эффективно управлять Циклом WordPress, перематывая его на начало для повторного использования. Это удобно в ситуациях, когда нужно дважды обработать одни и те же посты, например, сначала для вывода краткой информации, а затем полного контента.