В понимании кода WordPress большое значение имеет понятие цикла WordPress. Цикл WordPress также называют «loop», «the loop», «the loop WordPress».
Цикл WordPress это постоянно повторяющейся действие, которое позволяет обрабатывать массив информации и выводить нужную информацию на текущей странице поста, а также формировать страницу поста в соответствии с критериями указанными внутри этого цикла.
Любой код, имеется в виду HTML и PHP, размещенный внутри цикла будет повторяться для каждой записи. Например, специальный тег comments_link() который выводит ссылку на показ формы комментария , применяется внутри цикла WordPress и будет повторяться для каждой записи.
Классический пример цикла, в файле index.php. Данный файл отображает только содержимое каждого сообщения, в соответствии с условиями, использованными для подготовки Цикла. Этот пример показывает, как мало нужно для работы Цикла.
<?php
get_header();
if (have_posts()) :
while (have_posts()) :
the_post();
the_content();
endwhile;
endif; get_sidebar();
get_footer();
> Например, в файле content.php есть цикл, в котором последовательно прописаны теги, выводящие заголовок статьи, содержание статьи, комментарии статьи. Следовательно, каждая статья будет начинаться с заголовка, потом содержание, потом комментарии. Но стоит поменять местами теги выводящие комментарии и содержания, все статьи будут начинаться с заголовка, потом комментарии, потом содержание.
В WordPress возможны четыре построения циклов для вывода записей:
Стандартный цикл WordPress это цикл с предусловием (оператор PHP while). В стандартном цикле мы не указываем данные для выборки записей. При входе в цикл вычисляется условие и, если его значение отлично от нуля, выполняется тело цикла. Поэтому, стандартный цикл сразу начинаем с if (have_posts()), и если запись присутствует, то тело цикла выполняется до его окончания, а данные после обработки выводятся на экран.
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="page-title"><?php the_title(); ?></h2>
<?php edit_post_link(__( 'Edit', 'zeeTasty_lang' )); ?>
<div class="entry clearfix">
<?php the_post_thumbnail('medium', array('class' => 'alignleft')); ?>
<?php the_content(); ?>
</div>
<?php wp_link_pages(); ?>
</div>
<?php endwhile; ?>
<?php endif; ?> Более точно, это работает так:
После того как WordPress загрузил заголовок блога и передал его в шаблон, переходим к Циклу записей. Функция have_posts() вызывает переменную $wp_query->have_posts(), которая проверяет счетчик цикла на наличие любых записей во всем массиве записей. Также функция the_post() вызывает переменную $wp_query->the_post(), которая увеличивает счетчик цикла и устанавливает глобальную переменную $post, аналогично всем данным записей. Выполнив цикл один раз, функция have_posts() вернет false(нет) и цикл закончится.
Функция query_posts() позволяет изменить базовый запрос и вывести нужный нам вариант записей. query_posts() не предназначена для создания нового цикла, а только для изменения стандартного цикла.
Другими словами, цикл WordPress на основе query_posts() это стандартный цикл WordPress с измененными (дополненными) параметрами запроса. Например, функцией query_posts() можно вырезать отдельные категории или изменить порядок сортировки или убрать отдельные статьи или изменить количество записей.
Важно: при вызове query_posts создается новый объект wp_query, который затем будет использоваться в цикле, поэтому функция query_posts должна располагаться перед стандартным циклом WordPress. При таком расположении WordPress перестает учитывать параметры записи, полученные из URL, и цикл выполняется с параметрами запроса query_posts().
<?php
query_posts($args);
//$args - параметры запроса
// [Стандартный Цикл WordPress]
wp_reset_query(); // сброс запроса
?> Еще пример
<?php
// Запрос -The Query
query_posts( $args );
// The Loop-стандартный цикл
while ( have_posts() ) : the_post();
echo '<li>';
the_title();
echo '</li>';
endwhile;
// Reset Query- сброс (остановка) guery
wp_reset_query();
?> Здесь стоит поговорить, про параметры функции query_posts(). Находится query_posts() в файле wp-includes/query.php.
Цикл WordPress на основе класса WP_Query() используется для вывода записей, которые никак не связанны со страницей или для создания множественных циклов. Выглядят эти циклы аналогично циклам с использование функции query_posts(). Параметры для WP_Query() такие же.
Особенностью циклов на основе WP_Query() является создание нового объекта ($query), который не связан с аналогичным глобальным объектом $wp_query и поэтому никак не нарушается структура текущей страницы.
Так же, мы можем использовать новый объект в других целях, не только для вывода записей, но и для различного рода проверок.
<?php
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
} else {
// Сообщения не найдены
}
/* Восстановления исходных данных сообщение */wp_reset_postdata(); <?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
/* Восстановления исходных данных сообщения
* Примечание: Так как мы далее создаем новые WP_Query мы не топтать
* Оригинальная wp_query $, и это не дмолжны быть сброшены.
*/wp_reset_postdata();
/* Второй Query (without global var) */$query2 = new WP_Query( $args2 );
// Второй Loop
while( $query2->have_posts() ) {
$query2->next_post();
echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
}
// Восстановления исходных данных сообщение
wp_reset_postdata();
//wp_reset_postdata() используется как раз для того,
//чтобы вернуть правильные данные в переменную $post.
?> Функция get_posts() используется для создания еще одного цикла, помимо основного. get_posts() получает записи (посты, страницы, вложения) из Базы Данных по указанным критериям.
Цикл WordPress на основе get_posts() считается самым удобным вариантом вывода нужных записей в нужном порядке. get_posts() в большинстве случаев полностью заменяет функцию WP_query(). Например,
Функция get_posts() аналогично с query_posts() работает на основе класса WP_query() и поэтому передаваемые параметры одинаковые.
Примечание: Класс WordPress (тоже, что и класс php), это самодостаточный код выполняющий определенную функцию. Класс имеет свое имя, содержит собственные константы, переменные (называемые свойствами) и функции (называемые методами).
Выведем 5 записей из рубрики 13
<?php
global $post; // не обязательно
$args = array('category' => 13); // 5 записей из рубрики 13
$posts = get_posts($args);
foreach( $posts as $post ){ setup_postdata($post);
// стандартный вывод записей
}
wp_reset_postdata(); // сбрасываем переменную $post
?> На этом про Цикл WordPress все!
©www.wordpress-abc.ru
Продвижение сайтов WordPress — это только установить SEO-плагин и прописать ключевые слова. К сожалению, этого давно недостаточно. Читать дальше ... Читать дальше
Пошаговая инструкция, которая поможет вам сделать правильный выбор масло для легкового автомобиля. Читать дальше
Пошаговая инструкция, как правильно выбрать синтетическое моторное масло для Lada. Читать дальше
Какое масло нужно для технического обслуживания двигателя Chery. Читать дальше
Путеводитель по выбору моторного масла для Haval. Инструкция для вдумчивого владельца. Читать дальше
В этом материале мы расскажем, как правильно диагностировать проблему, куда и когда обращаться, и как не потерять самое важное, если… Читать дальше