Як було зазначено у вступній частині цієї серії статей, клас WP_Query складається з чотирьох основних елементів:

  • Аргументи для запиту – про них ми поговоримо більш детально в наступних статтях з цієї серії;
  • Сам запит;
  • Цикл – відображає вміст запису, заголовки або все те, що вам потрібно вивести на екран;
  • Заключна секція – тут закриваються теги if і while, а також скидаються дані записи.

У сьогоднішньому керівництві ми хочемо розповісти вам, як використовувати цикли з WP_Query, включаючи два основних методи їх структурування, а також використання декількох циклів.

Де доречно використовувати цикли

Після того як WordPress запускає запит з використанням вказаних вами аргументів, йому потрібно повідомити, що з отриманих даних треба відобразити на сторінці. Саме тут у дію вступає цикл.

При цьому найчастіше використовуються три конструкції:

  • if($query->have_posts()) — перевіряє наявність записів;
  • while($query->have_posts()) — повторює цикл після кожного запису;
  • $query->the_post() — здійснює доступ до конкретного запису.

Цикл в класі WP_Query виглядає наступним чином:

have_posts() ) {
// початок циклу обробки даних з результатів запиту.
while ( $query->have_posts() ) {
$query->the_post();
// тут відображається результат, отриманий при перевірці вмісту запису.
}
}
// Відновлення вихідних даних запису.
wp_reset_postdata();
?>

Структура циклу

Структура вашого циклу, залежить від того, які дані запису ви хочете вивести на екран. Пропонуємо вам приклад циклу, який виводить заголовок запису, мініатюру і уривок з тексту:

have_posts() ) {
// початок циклу обробки даних з результатів запиту.
while ( $query->have_posts() ) {
$query->the_post();
?>


Перевірка вмісту за допомогою циклів

Іноді перед списком записів потрібно вивести заголовок, або ж помістити всі записи в окремий елемент. Якщо ви додасте теги перед циклом, то вони будуть просто з’являтися на сторінці без повернення даних. Тобто виведеться лише один заголовок або вся розмітка.

Цю проблему легко вирішити, якщо помістити елемент або заголовок всередину самого тега:

have_posts() ) {
echo «;
echo ‘

‘. __( ‘Heading’, ‘tutsplus’ ) . ‘

‘;
// початок циклу обробки даних з результатів запиту
while ( $query->have_posts() ) {
$query->the_post();
?>



Спочатку ми перевіряємо, повернув наш запит які-небудь записи. Якщо так, то ми відкриваємо містить елемент і додаємо в нього заголовок. Давайте припустимо, що нам потрібно створити список з усіма записами з певної рубрики.

Елемент списку ul знаходиться за межами нашого циклу, так як не пов’язаний з якоюсь певною записом, і нам потрібно виводити його тільки при наявності записів:

‘category-slug’,
‘post_type’ => ‘post’
);
// довільний запит.
$query = new WP_Query( $args );
// перевірка наявності результатів запиту.
if ( $query->have_posts() ) {
echo ‘