От автора: в обсуждениях WP и, в частности, в разговорах по разработке тем (или при создании новых шаблонов страниц в теме) вы неизбежно столкнетесь с понятием «цикл WordPress». Цикл (loop) – это фреймворк, внутри которого WP строит контент для страниц, на которые заходит пользователь. Будь-то статичная домашняя страница или страница последних постов в блоге, или что-то другое. Возможно, звучит сложно, но на деле это просто механизм зацикливания.
В простейшем случае цикл – это зацикленная структура, как и любая другая структура в программировании. Она проходится по контенту на сайте, циклически перемещаясь по постам и страницам, и вытягивает запрошенный контент. В самом сложном случае цикл можно запускать несколько раз, выбирая только определенные элементы из заданных категорий, элементы, не относящиеся к заданным категориям, опубликованные в пределах дат, а также элементы, идентифицированные по другим признакам.
Во всех шаблонах тем для WP есть цикл. Это один из способов, с помощью которого шаблон может искать и вытягивать контент из страниц и постов, хранящихся в базе данных. Разберем несколько примеров:
Базовый пример цикла
1 2 3 4 5 6 7 8 |
<?php if ( have_posts() ) { while ( have_posts() ) { the_post(); // контент поста } } ?> |
В примере выше видно, что настройка очень простая. Все начинается с условия наличия постов have_posts. Далее следует цикл while, задающий условие. Пока есть посты (опять с помощью have_posts), проходимся в цикле по следующему посту и вызываем the_post – конкретный пост.
Конкретные запросы
Если нужно что-то большее, чем просто возврат всех постов, то нужно ограничить запросы. Здесь нам поможет WP_Query.
Фильтрация по категориям
Пример ниже – модифицированная версия кода с Codex, в котором мы запрашиваем посты из категории с id, равным 4. Далее можно посмотреть образец содержимого самого цикла. Мы ищем посты из категории с ID 4, в div .post отображаем заголовок поста (со ссылкой на пост), дату, контент и метаданные поста.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!-- Запрос постов из категории 4 --> <?php $query = new WP_Query( array( 'cat' => 4 ) ); ?> <!-- Начало цикла --> <?php if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); ?> <div class="post"> <!-- Заголовок в виде ссылки на пост. --> <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> <!-- Дата(формат – Ноябрь 16, 2009) и ссылка на другие посты автора. --> <small><?php the_time( 'F jS, Y' ); ?> by <?php the_author_posts_link(); ?></small> <!-- Контент поста --> <div class="entry"> <?php the_content(); ?> </div> <!-- Метаданные поста --> <p class="postmetadata"><?php _e( 'Posted in' ); ?> <?php the_category( ', ' ); ?></p> </div> } } |
С помощью WP_Query можно настраивать результат. Можно включить посты только из одной категории или нескольких, или включить все посты кроме определенной категории или нескольких. Можно искать и возвращать посты по ключевым словам, находить посты по ID, показывать только данные со страниц с помощью post_type и т.д. Более подробно с WP_Query можно ознакомиться в документации WP_Query.
«Совет: получить ID категории можно разными способами. Простой – перейти в «Posts» и далее в «Categories» в WP-Admin, нажать правую кнопку мыши на имени категории из списка и сохранить URL. Далее необходимо вставить ссылку в текстовый редактор. Ссылка будет выглядеть примерно так: //example.com/wp-admin/term.php?taxonomy=category&tag_ID=4&post_type=post&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dcategory. Нам нужен tag_ID!»
Фильтрация по значениям пользовательских полей
Пользовательские поля в WP могут быть очень полезными, и время от времени вам, возможно, понадобится фильтровать посты по значениям этих полей. Простая задача, но ее нужно показать новичкам в разработке WP (и тем, кто не углублялся в кастомные шаблоны и циклы), чтобы понять масштаб настроек. Скажем, у вас есть пользовательское поле department, и вы ищите посты по значению marketing:
1 |
$query = new WP_Query( array('meta_key' => 'department', 'meta_value' => 'marketing') ); |
Понятие цикла
Самый лучший способ понять цикл – использовать его. Вытягивайте с его помощью контент из шаблонов, которые вы создаете для тем, или используйте его в коде существующих шаблонов тем. Если нужно что-то сделать, отфильтровать по определенным критериям, снова запускайте цикл. Посмотрите документацию The Loop в Codex или ищите идеи в Google. Ограничений нет!
Автор: Jeff Smith
Источник: //www.sitepoint.com/
Редакция: Команда webformyself.