Здрастуй, дорогий читачу!
Сьогодні хочу продовжити поповнювати скарбничку розробника WordPress і познайомлю Вас з чотирма способами завдання головного циклу WordPress, отримав він назву в народі loop. Циклом називається, тому що це запит до бази даних на наявність постів / записів в певній таблиці і якщо вони є то за допомогою циклу while відбувається перебір всіх записів і відображення кожної з них на блозі за допомогою спеціальних тегів WordPress.
Для початку слід розуміти, що loop - це основа, так би мовити серце будь-якої теми і важливо коректно його використовувати.
Loop, який WordPress використовує за замовчуванням Ви можете знайти в файлі index.php Стандартний теми (на даний момент twentytwelve) починається він зазвичай рядками if (have_posts ()) і містить в собі всю розмітку записи або списку записів. Як це не дивно але стандартний цикл прекрасно працює для більшості «одноціклових» тим, але коли потрібно створювати більш складні шаблонні конструкції, що використовують для виведення інформації кілька циклів або для виведення довільних типів записів, то в таких випадках використовувати стандартний цикл не вийде. На щастя розробники подбали про цю проблему і є 4 способи задати цикл WordPress:
- Стандартний цикл
- Цикл c query_posts ()
- Цикл c WP_Query ()
- Цикл c get_posts ()
Кожен з наведених циклів виконує по суті одну і ту ж задачу: виводить записи або список записів, які відповідають певним заданим параметрам. Давайте детально розглянемо яким чином використовувати цикл в створенні теми.
Стандартний цикл
<? Php if (have_posts ()):?> <? Php while (have_posts ()): the_post (); ?> <Div <? Php post_class (); ?> Id = "post - <? Php the_ID ();?>"> <H1> <a href="<?php the_permalink(); ?> "> <? Php the_title (); ?> </a> </ h1> <? Php the_content (); ?> </ Div> <? Php endwhile; ?> <Div class = "navigation"> <div class = "next-posts"> <? Php next_posts_link (); ?> </ Div> <div class = "prev-posts"> <? Php previous_posts_link (); ?> </ Div> </ div> <? Php else:?> <Div <? Php post_class (); ?> Id = "post-0"> <h1> Нічого не знайдено </ h1> </ div> <? Php endif; ?>Стандартний цикл включає в себе умову (if) і перебір (while). Умова на наявність постів, якщо постів немає то виводиться контейнер з повідомленням, що записів немає, а якщо записи є те за допомогою перебору відображається контент записи. Контент записи виводиться стандартними тегами WordPress: the_title, the_content, the_excerpt, the_permalink і так далі. Кількість відображуваних записів на сторінках блогу / сайту можна вказати в налаштуваннях панелі управління в розділі «Читання».
Цикл з query_posts ()
Функція query_posts () дозволяє повністю змінити стандартний цикл, також з її допомогою можна встановити тільки деякі параметри для стандартного циклу.
<? Php global $ query_string; / * Обязятельно оголошено !!! * / $ Posts = query_posts ($ query_string. '& Posts_per_page = 15 & cat = -1, -2, -3'); / * Виключаємо відображення записів з трьох категорій 1,2,3 і встановлюємо к-ть відображаються записів * /?> <? Php / * Тут пишемо стандартний цикл * /?> <? Php wp_reset_query (); / * Обязятельно скидаємо цикл * /?>У функції query_posts () є багато параметрів, що настроюються, почитати про їх застосуванні можна в кодексі WordPress . Використовувати цей тип завдання циклу відмінно підходить для завдання параметрів одного циклу, для завдання декількох циклів доцільно використовувати такі функції.
Цикл з WP_Query ()
Для кращої функціональності і завдання декількох циклів рекомендують використовувати функцію WP_Query (). Вона приймає такі ж параметри як і query_posts (), але злегка відрізняється завданням циклу:
<? Php $ custom_query = new WP_Query ( 'cat = -9'); / * Виключаємо категорію з айди 9 * / while ($ custom_query-> have_posts ()): $ custom_query-> the_post (); ?> <Div <? Php post_class (); ?> Id = "post - <? Php the_ID ();?>"> <H1> <a href="<?php the_permalink(); ?> "> <? Php the_title (); ?> </a> </ h1> <? Php the_content (); ?> </ Div> <? Php endwhile; ?> <? Php wp_reset_postdata (); // reset the query?>Для завдання циклу за допомогою функції WP_Query () нам не потрібна змінна query_string і для завдання парметр циклу ми можемо використовувати ті ж параметри що і для query_posts (). Для того щоб задати кілька циклів можете скористатися наступним шаблоном:
<? Php // Цикл 1 $ one_query = new WP_Query ( 'cat = -1'); // виключаємо категорію while ($ first_query-> have_posts ()): $ one_query-> the_post (); ... endwhile; wp_reset_postdata (); // Цикл 2 $ two_query = new WP_Query ( 'cat = -2'); // виключаємо категорію while ($ second_query-> have_posts ()): $ two_query-> the_post (); ... endwhile; wp_reset_postdata (); // Цикл 3 $ three_query = new WP_Query ( 'cat = -3'); // виключаємо категорію while ($ third_query-> have_posts ()): $ three_query-> the_post (); ... endwhile; wp_reset_postdata (); ?>Кожен додатковий цикл може бути розміщені в будь-якому місці шаблона вашої теми, причому не обов'язково використовувати їх послідовно. Наприклад, один цикл можете размещестіть в сайдбарі, інший в шапці, третій в підвалі і так далі. Як плюс кожному циклю можна задатьунікальную конфігурацію.
Використовувати WP_Query () доцільно для створення декількох, індивідуальних циклів, з його допомогою можна задати будь-яке необхідне к-ть циклів. Детальніше про функції WP_Query () в кодексі WordPress
Цикл з get_posts ()
Використання функції get_posts () найпростіший і безпечний спосіб для завдання декількох циклів. У будь-якому місці Вашої теми де Ви хочете поставити цикл функція get_posts буде ідеальним рішенням. Здається цикл з її допомогою, таким чином:
<? Php global $ post; / * Обов'язково * / $ args = array ( 'category' => -9); / * Виключаємо категорію з айди 9 / $ custom_posts = get_posts ($ args); foreach ($ custom_posts as $ post): setup_postdata ($ post); <a href="<?php the_permalink(); ?> "> <? php the_title (); ?> </a> <? Php the_content (); ?> Endforeach; wp_reset_postdata (); ?>Функція get_posts () вимагає масиву параметрів, до речі параметри до неї підходять від функцій WP_query () і query_posts (), винятками є:
- numberposts замість post_per_page
- category замість cat
Детальніше про функції get_posts () читайте в кодексі WordPress
Підведемо підсумки
Як і обіцялося ми розкрили секрети завдання і зміни циклу WordPress, нагадаю що коли використовується:
- query_posts () - використовується для зміни стандартного циклу
- WP_Query () - іспользется для зміни циклу або для створення декількох циклів
- get_posts () - використовується для створення декількох додаткових циклів
Дякую за увагу, буду вдячний за коментарі та поширенні посилання на статтю в соціальних мережах!
Php if (have_posts ()):?Gt; <?
Php while (have_posts ()): the_post (); ?
Gt; <Div <?
Php post_class (); ?
Gt; Id = "post - <?
Php the_ID ();?
Gt;"> <H1> <a href="<?
Php the_permalink(); ?
Php the_title (); ?