Що таке Цикл 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 автоматично додає дані відповідно до того, на якій сторінці ми зараз знаходимося, наприклад, на головній сторінці або сторінці рубрик, дані будуть різні.
Але отримати дані і потім їх обробити в циклі ми можемо самостійно.
Читайте докладніше: 3 способи побудови циклів у WordPress
Цикл із використанням 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 відома – вона містить дані останнього, обробленого в циклі посту, але це вже інша тема).