Цикл в WordPress

wordpress-loop

Цикл является механизмом по умолчанию, который WordPress использует для вывода записей с помощью файлов шаблонов темы. Сколько записей извлекается — определяется количеством записей на страницу, заданных в Настройки — чтение. В цикле WordPress извлекает каждую запись, которая будет отображаться на текущей странице и форматирует ее в соответствии с инструкциями вашей темы.

Цикл извлекает данные для каждой записи из базы данных WordPress и вставляет соответствующую информацию в месте каждого тега шаблона. Любой HTML или PHP-код в ЦИКЛЕ будет обработан для каждой записи.

Проще говоря, ЦИКЛ соответствует своему названию: он перебирает каждую запись, извлеченную для текущей страницы по одной и выполняет действие, указанное в вашей теме.

Можно использовать ЦИКЛ в WordPress для ряда различных целей, например чтобы:

  • вывести заголовки и краткое содержимое записей на домашнюю страницу вашего блога;
  • отобразить контент и комментарии к отдельной записи;
  • отобразить контент на отдельной странице, используя теги шаблонов; и
  • отобразить данные пользовательских типов записей и пользовательских полей.

Вы можете настроить ЦИКЛ через ваши файлы шаблонов для отображения и манипулирования различным содержимым.

WordPress Цикл в деталях

Основной цикл выглядит так:

Этот ЦИКЛ говорит, что когда есть записи, нужно перебрать и отобразить записи. Разберем более подробно:

  • have_posts() функция проверяет, есть ли какие-либо записи.
  • если есть записи, цикл while продолжает выполняться, пока условие в скобках логически верно. Пока have_posts() соответствует TRUE, цикл будет продолжаться.

Использование цикла WordPress

Цикл должен быть помещен в index.php и в любых других шаблонах, которые используются для отображения информации о записи. Так как вы не хотите, чтобы дублировался ваш заголовок снова и снова, цикл всегда должен быть помещен после вызова get_header(). Например:

В приведенном выше примере, конец цикла выражается ENDWHILE и ENDIF. Цикл всегда должен начинаться с той же if и while конструкции, как уже упоминалось выше, и должен заканчиваться соответствующими конечными конструкциями.

Любые теги шаблона, которые вы хотите применить ко всем записям должны быть между начальной и конечной конструкцией цикла.

Совет: Вы можете включить пользовательское 404 «не найдено» сообщение, которое будет отображаться, если нет записей, соответствующих указанным критериям. Сообщение должно быть помещено между ENDWHILE и ENDIF конструкциями, как видно из приведенных ниже примеров.

Крайне простой index.php файл будет выглядеть так:

Что цикл может выводить

Цикл может отображать несколько различных элементов для каждой записи. Например, вот некоторые распространенные теги шаблонов, используемые во многих темах:

  • next_post_link() – ссылка на запись, опубликованную хронологически после текущей записи
  • previous_post_link() – ссылка на запись, опубликованную хронологически до текущей записи
  • the_category() – категория или категории соответствующие показываемой записи или странице
  • the_author() – автор записи или страницы
  • the_content() – главный контент записи или страницы
  • the_excerpt() – Первые 55 слов из контента записи, завершающиеся многоточием (…) или ссылкой читать далее, которая ведет к полной записи. Вы также может использовать “Excerpt” поле записи для настройки длины конкретной цитаты.
  • the_ID() – ID записи или страницы
  • the_meta() – пользовательские поля ассоциирующиеся с записью или страницей
  • the_shortlink() – ссылка на страницу или запись, использующая url сайта и ID записи или страницы
  • the_tags() – метка или метки связанные с записью
  • the_title() – заголовок записи или страницы
  • the_time() – время или дата записи или страницы. Может быть настроено используя стандартные php функции для работы с датой.

Вы также можете использовать условные теги, такие как:

  • is_home() – Возвращает TRUE если текущая страница является домашней страницей
  • is_admin() – Возвращает TRUE если администратор авторизован и посещает сайт
  • is_single() – Возвращает TRUE если отображаемая текущая страница является одиночной записью
  • is_page() – Возвращает TRUE если отображаемая текущая страница является одиночной страницей
  • is_page_template() – Может быть использован для определения использования специфического шаблона для страницы, например: is_page_template('about-page.php')
  • is_category() – Возвращает TRUE если страница или запись принадлежат определенной категории, например: is_category('news')
  • is_tag() – Возвращает TRUE если страница или запись имеют определенный тег
  • is_author() – Возвращает TRUE если определенный автор авторизован и посещает сайт
  • is_search() – Возвращает TRUE если текущая страница это страница с результатами поиска
  • is_404() – Возвращает TRUE если текущая страница не существует
  • has_excerpt() – Возвращает TRUE если запись или страница имеют цитату (отрывок)

Примеры цикла WordPress

Давайте взглянем на некоторые примеры WordPress цикла в действии:

Архив блога

Большинство блогов имеет страницу архива, которая может показывать несколько вещей, включая заголовок записи, миниатюры, и отрывок. Пример ниже показывает простой цикл, который проверяет, есть ли какие-либо записи, и, если есть, выводит для каждой записи заголовок, миниатюру и цитату. Если записей не существует, он отображает сообщение в скобках.

Отдельная запись

В WordPress, каждая запись имеет свою собственную страницу, которая отображает соответствующую информацию для этой записи. Теги шаблона позволяют настроить, какую информацию вы хотите отобразить.

В приведенном ниже примере, цикл выводит название записи и содержание. Вы можете использовать этот пример в файле шаблона записи или страницы для отображения основной информации о записи. Вы также можете настроить этот шаблон, чтобы добавить больше данных к записи, например категорию.

Применение стилей к записям в зависимости от категории

Пример ниже делает несколько вещей:

  • Во-первых, он отображает для каждой записи ее название, время, автора, содержание, категории, аналогично отдельной записи из примера выше.
  • Далее, он делает возможным для записей с идентификатором категории «3» изменение оформления, используя in_category() тег шаблона.

Комментарии кода в этом примере предоставляют подробности на каждой стадии цикла:

Множественные циклы в WordPress

В некоторых ситуациях, возможно вам потребуется использовать более одного цикла. Например, вы захотите отобразить две группы записей на той же странице, но делать разные операции с каждой группой. Типичный пример этого, как показано ниже, отображает одиночную запись со списком записей из той же категории ниже одиночной записи.

Как вы можете видеть в примере выше, мы сначала отображаем обычный цикл. Затем мы определяем новую переменную, которая использует WP_Query чтобы запросить определенную категорию; в нашем случае, мы выбрали ярлык example-category.

Обратите внимание, что обычный цикл в примере выше, имеет одно отличие: он вызывает wp_reset_postdata(), чтобы сбросить данные. Прежде чем вы сможете использовать второй цикл, вам нужно сбросить данные. Есть два способа сделать это:

  1. Используя rewind_posts() функцию; или
  2. Создавая новые объекты запроса.

Сброс множественного цикла

Важно при использовании нескольких циклов в шаблоне производить их сброс. Иначе это может привести к неожиданным результатам из-за того, как данные хранятся и используются в глобальной переменной $post. Есть три основных способа сбросить цикл в зависимости от того, как он вызывается.

Использование wp_reset_postdata()

Используйте wp_reset_postdata(), когда вы запускаете обычный или множественные циклы с помощью WP_Query. Эта функция восстанавливает глобальную переменную $post в текущей записи в главном запросе. Если вы следуете лучшим практикам, то это наиболее распространенная функция, которую вы будете использовать для сброса цикла.

Чтобы правильно использовать эту функцию, поместите следующий код после любых циклов с WP_Query

Вот пример цикла с использованием WP_Query, который сбрасывается с использованием wp_reset_postdata().

Использование wp_reset_query()

Использование wp_reset_query() восстанавливает WP_Query и глобальные данные $post в оригинальном главном запросе. Вы ДОЛЖНЫ использовать эту функцию, чтобы сбросить цикл, если вы используете query_posts() в вашем цикле (стоит также знать, что использование query_posts() НЕ рекомендуется). Вы можете использовать ее после пользовательских циклов с WP_Query, потому что она на самом деле вызывает wp_reset_postdata(), когда запускается. Тем не менее, это рекомендуемая практика использовать wp_reset_postdata() с любыми пользовательскими циклами с участием WP_Query.

Предупреждение: query_posts() является не лучшей практикой и ее следует избегать, если это возможно. Таким образом, вы не должны иметь много запусков wp_reset_query().

Чтобы правильно использовать эту функцию, поместите следующий код после любых циклов с query_posts().

Использование rewind_posts()

Вы можете использовать rewind_posts() чтобы сделать цикл через тот же запрос во второй раз. Это полезно, если вы хотите отобразить тот же запрос дважды в разных местах на странице.

Вот пример использования rewind_posts():

Навигация по разделам:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *