Що таке Цикл WordPress – The Loop

Почну з того, що говорити цикл loop – це неправильно. Це те саме, що сказати, – «цикл цикл», тобто. loop = цикл = повторювана дія. Правильно говорити просто “Цикл WordPress” . Далі в тексті “Цикл WordPress” – те саме, що “loop”, “the loop” або “цикл the loop WordPress”.

Цикл WordPress (The Loop) – це перебір записів (постів) та виведення будь-якої інформації про кожен пост. Цикл отримує масив записів (об’єктів), перебирає цей масив і під час перебору виводить інформацію про кожен пост. У цьому циклі використовуються спеціально створені йому функції: the_date() тощо.

Коли говориться «Функція використовується всередині Цикл WordPress» — це означає, що функцію можна використовувати всередині циклу, при цьому немає необхідності передавати їй параметри, тому що функція розрахована на використання всередині циклу.

Наприклад, the_title() викликається без параметрів, але при цьому функція буде виводити заголовок поточного запису в циклі. Дані для виведення беруться із глобальної змінної $post .

Цикл у WordPress виглядає так:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
	<!-- Цикл WordPress -->
	<p>Виводимо дані запису. Тут працюють функції для циклу, наприклад the_title() </p>
	<h2><?php the_title() ?></h2>
<?php endwhile; else : ?>
	<p>Записів немає.</p>
<?php endif; ?>

Або можна записати так:

<?php if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>
	<!-- Цикл WordPress -->
	<!-- Висновок постів: the_title() і т.д. -->
<?php } } else { ?>
	<p>Записів немає.</p>
<?php } ?>

Ще можна записати так (частину «Записів немає» у цьому випадку можна видалити):

<?php while ( have_posts() ){ the_post(); ?>
	<!-- Цикл WordPress -->
	<!-- Висновок постів: the_title() і т.д. -->
<?php } ?>
<?php if ( ! have_posts() ){ ?>
	<p>Записів немає.</p>
<?php } ?>

Вся інформація про запис (пост) зберігається в глобальній змінній $post . Припустимо, що цикл обробляє масив містить у собі дані 10 постів, тоді циклу буде 10 повторень і змінна $post буде змінюватися 10 разів, і за кожному повторенні зі змінною $post буде зчитуватися інформація про пост і виводиться на екран, через теги шаблона: the_title() , the_content() … Таким чином, будь-який PHP/HTML код поміщений в цикл WordPress буде повторюватися поки працює цикл: 10 ітерацій циклу – 10 повторень.

Типовий приклад Цикл – це виведення постів на сторінці категорій, міток, на головній сторінці WordPress.

Повний приклад циклу

Наведу приклад циклу WordPress, із вбудованими в код коментарями (всередині <!-- -->)

<!-- Перевірка наявності записів у циклі -->
<?php if ( have_posts() ) : ?>

	<!-- Початок циклу -->
	<?php while ( have_posts() ) : the_post(); ?>
		<!-- Цикл WordPress -->
		<!-- Тут вже визначилася змінна $post, -->
		<!-- на основі якої буде будуватися подальший код. -->
		<!-- $post змінюватиметься кожного посту while( have_posts() ). -->
		<!-- $post потрібна, щоб працювали теги шаблону: in_category('3'), the_permalink() і т.д. -->

		<!-- Перевірка чи знаходиться цей пост у категорії 3. -->
		<!-- Якщо так, то задаємо CSS клас div-у class="post-cat-three". -->
		<!-- Якщо ні, клас буде post class="post". -->
		<?php if ( in_category('3') ) { ?>
				  <div class="post-cat-three">
		<?php } else { ?>
				  <div class="post">
		<?php } ?>

		<!-- Виводимо заголовок посту, як посилання сам пост. -->
		<h2><a href="<?php the_permalink() ?>" title="Посилання на: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>

		<!-- Виводимо дату посту та посилання на інші записи автора. -->
		<small><?php the_time('F jS, Y') ?> Автор: <?php the_author_posts_link() ?></small>

		<!-- Виводимо текст посту в div тегу. -->
		<div class="entry">
		   <?php the_content(); ?>
		</div>

		<!-- Виводимо категорії посту, через кому. -->
		<p class="postmetadata">Розташовано в <?php the_category(', '); ?></p>
		</div> <!-- закриваємо основний тег div -->

		<!-- Звідси цикл починає повторюватися, якщо ще є пости -->
		<!-- Зупиняємо цикл (endwhile), -->
	<?php endwhile; ?>
	<!-- Повне закінчення циклу. -->

<!-- Якщо записів у циклі немає - цикл не спрацював (else) -->
<?php else: ?>

	<p>Немає постів у циклі.</p>

<?php endif; ?>

Інші варіанти циклу

Приклади циклу вище, де використовується have_posts() , отримують дані для перебору з глобальної змінної $wp_query, в яку WP автоматично додає дані відповідно до того, на якій сторінці ми зараз знаходимося, наприклад, на головній сторінці або сторінці рубрик, дані будуть різні.

Але отримати дані і потім їх обробити в циклі ми можемо самостійно.

Цикл із використанням get_posts() :

<?php
global $post;

$myposts = get_posts( 'numberposts=5&offset=1&category=1' );

foreach( $myposts as $post ){
	setup_postdata($post);
	?>
	<!--
	тут формування виведення постів,
	де працюють теги шаблону, які стосуються the loop, наприклад the_title()
	-->
	<?php
}
wp_reset_postdata();
?>

Цикл з використанням wp_query() :

// задаємо потрібні нам критерії вибірки даних із БД
$query = New WP_Query([
	'posts_per_page' => 5,
	'orderby' => 'comment_count'
]);

// Цикл
global $post;

if ( $query->have_posts() ) {
	while ( $query->have_posts() ) {
		$query->the_post();
		<?php the_title() ?>
	}
} else {
	// Постів не знайдено
}

wp_reset_postdata(); // Скидаємо $post. Повертаємо оригінальні дані

Навіщо треба розуміти всередині циклу ми чи ні?

Відрізняти де використовується цикл WordPress, а де код знаходиться за межами циклу потрібно, тому що в WordPress є певні теги шаблону, які не працюють за межами циклу, наприклад: тег шаблону спрацював, повинна бути визначена змінна $post , яка за межами циклу WordPress невідома (точніше не коректна, якщо цикл запускався, то $post відома – вона містить дані останнього, обробленого в циклі посту, але це вже інша тема).

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *