- Цикл WordPress
- Что в видеоуроке?
- Основной и дополнительные циклы
- Запись цикла в коде
- Как изменить количество записей в основном цикле WordPress?
- Способ 1. В настройках чтения
- Способ 2. При помощи pre_get_posts
- Как стилизовать один пост по-другому
- Функции для использования внутри цикла
- Различные возможности вывода записей на странице WordPress
- Как осуществить вывод записей из одной категории на странице другой категории при помощи кода
- Featured Posts with thumbnails
- Posts per Cat
- Content Views
- 3 способа построения циклов в WordPress — WP_Query<> get_posts() query_posts()
- 1) Стандартный Цикл и цикл на основе query_posts()
- Цикл на основе query_posts()
- Необходимость wp_reset_query()
- Когда использовать query_posts()?
- 2) Цикл на основе WP_Query()
- Зачем нужно использовать wp_reset_postdata() ?
- Когда использовать WP_Query() ?
- 3) Цикл на основе get_posts()
- #1. Пример цикла на основе get_posts() . Выведем 5 записей из рубрики 9:
- Когда использовать get_posts()
- Выводы
Цикл WordPress
Содержание
Цикл WordPress — это стандартный механизм WP, использующийся для вывода постов в теме WordPress. Цикл получает массив объектов постов, перебирает их и выводит информацию о них, даже если это страница отдельного поста.
Ниже вы найдёте подробное теоретическое руководство по циклам WordPress с примерами. Если же вам нужно больше практики, то рекомендую смотреть видеоурок.
Что в видеоуроке?
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
В видеоуроке – при помощи цикла WordPress динамически выводим контент на странице записи:
Выведем заголовок, контент поста, рубрики и теги, в которых находится пост (и ссылки на них), а также дату публикации поста в различных форматах времени.
После этого – программируем страницы блога, рубрик и меток, выводим динамически посты на них:
Выведем посты при помощи цикла WordPress, а также их заголовки, рубрики, даты публикации. Разберёмся, что такое «Отрывок» записи и поговорим о способах отображения короткого описания записи. И конечно же выведем заголовки и описания самих рубрик и меток тоже.
Также некоторые моменты я бы хотел описать текстом, не ограничиваясь видеоуроком.
Основной и дополнительные циклы
Если вы взглянули уже на список уроков этого курса, то могли бы заметить, что циклы WordPress бывают двух видов:
- Основной цикл (про который мы и будем говорить в этом уроке).
- Дополнительные циклы.
Давайте рассмотрим отличия основного цикла от дополнительных:
Основной цикл | Дополнительные циклы |
---|---|
Сам знает, какой контент выводить на странице, на которой используется. Не имеет параметров. | В функции вывода этих циклов требуется передавать дополнительные параметры, иначе они не знают, какие посты выводить. |
Может быть только один на странице. | Может быть сколько угодно на странице. |
Запись цикла в коде
Простейшую запись цикла можно представить вот так:
Код выше сам по себе уже полноценно работающий, если вы вставите его в тему, то он что-то будет вам выводить в зависимости от того, на какой странице вы находитесь.
Для того, чтобы окончательно понять, как работают циклы в WordPress, рекомендую сделать следующую последовательность действий:
- Создайте/оставьте в своей теме WordPress только шаблон index.php .
- Вставьте туда код, который вы видите чуть выше.
- Переходите на разные страницы и категории сайта через админку и обратите внимание, какие заголовки будут выводиться, например если перейдёте на запись – то выведется только заголовок этой конкретной записи, если на рубрику, то заголовки всех (не забываем про настройки чтения) записей из этой рубрики. Основной цикл сам знает, какие посты выводить. Но его можно и изменить кстати!
Как изменить количество записей в основном цикле WordPress?
Если вы перейдёте на страницу блога или в категорию, то можете заметить, что WordPress разделяет записи по страницам, причём это могут быть именно отдельные страницы с постраничной навигацией, либо подгрузка новых страниц при скролле. Потому что, если у вас сразу будут загружаться все существующие посты (а их могут быть сотни и тысячи), то браузер просто зависнет.
Способ 1. В настройках чтения
Если мы говорим о страницах архивов (рубрики, метки, поиск, архивы автора и т.д), то количество отображаемых за раз постов зависит от того, сколько их указано в Настройки > Чтение.
Способ 2. При помощи pre_get_posts
Кроме того, мы можем модифицировать это значение при помощи хука pre_get_posts (подробнее про него тут).
Только обратите внимание, что действие хука pre_get_posts распространяется на все существующие циклы, в том числе и на дополнительные, поэтому вам может понадобиться условие $query->is_main_query() или условные теги.
Как стилизовать один пост по-другому
Иногда бывает нужно, чтобы в цикле постов – один или несколько из них выводились в другом стиле. Это также заметно и на примере темы, которую мы используем – в ней первая запись в блоге больше, чем остальные. Это можно сделать при помощи обычной паременной-счётчика и функции get_template_part().
Функции для использования внутри цикла
В примере выше мы использовали функцию the_title() для вывода заголовков постов. При этом существуют и другие функции, которые мы можем использовать внутри цикла и они автоматически будут выводить информацию соответствующего поста, вот ещё некоторые из них:
- the_category() – выводит список ссылок на рубрики, в которых находится текущий пост,
- the_tags() – то же самое для тегов,
- the_time() – выводит дату и/или время публикации текущего поста
- the_content() – для вывода основного контента,
- the_excerpt() – позволяет вывести «Отрывок»,
- the_post_thumbnail() – выводит изображение записи,
- the_permalink() – выводит ссылку на страницу записи,
- the_ID() – ID записи.
Ещё больше функций для использования внутри цикла вы можете найти здесь.
Кроме того, ещё есть функции механизма цикла, вот они:
- have_posts() – проверяет наличие постов для вывода на странице (и не только).
- the_post() – сдвигает значение текущего поста в цикле.
- get_template_part() – очень удобная функция, которая поможет вам отделить HTML поста внутри цикла в отдельный .php файл и потом подключить его.
- get_previous_posts_link() – возвращает ссылку на предыдущую страницу,
- get_next_posts_link() – возвращает ссылку на следующую страницу пагинации,
- paginate_links() – возвращает ссылки пагинации.
Источник
Различные возможности вывода записей на странице WordPress
Время на чтение: 4 минуты
По умолчанию движок WordPress выводит на сайте записи, которые были добавлены позже всего — последние статьи, посты и заметки. Для блога это весьма удобно, но не всегда вывод последних записей подходит для определенных целей.
К примеру, если у вас блог-инструкция и вы хотите научить посетителей чему-либо. Чтобы это сделать, необходимо провести пользователя от начала и до конца, то есть начать с легкого и постепенно погружать его во все премудрости своего дела. Если на главной будет активирован вывод последних статей, то новые юзеры запутаются, и быстро испугаются предстоящих сложностей обучения!
Если у вас аналогичный обучающий проект на движке WordPress, и вы хотите чтобы на главной не было списка последних записей, а красовались только посты из определенной рубрики, тогда эта статья будет полезна для вас.
Вы узнаете о всех возможных методах настройки публикации постов из выбранной категории на странице.
Как осуществить вывод записей из одной категории на странице другой категории при помощи кода
WordPress имеет массу настроек. Необязательно настраивать вывод постов на главной странице — вы можете сделать это в определенной части сайта. Порой необходимо, чтобы в одной рубрики значились записи из другой. Чтобы это осуществить вам предстоит влезть в код вашего шаблона WordPress.
Найдите файл category.php (в некоторых темах WordPress он называется archive.php). Он как раз отвечает за отображение информации на определенной странице выбранной категории. Если планируете настроить главную страницу, тогда вам предстоит отредактировать файл index.php (иногда в темах WordPress его именуют content.php).
В указанных файлах есть отрезок кода, который отвечает за список записей на странице. Чтобы вывести заданные вами рубрики на страницу, вам предстоит внести изменения в код между
а точнее добавить строку кода перед тегом while. Найдите строчку такого вида
Именно она поможет вывести записи выбранной вами рубрики на странице. Цифра 2 в этом коде — это ID категории. Если хотите сменить ее, тогда просто смените цифру на ID другой рубрики. Либо пропишите через запятую сразу несколько разделов, вывод которых вы хотите осуществить.
Это самый простой способ, как вывести записи не последних постов со всех или только одной категории, а из указанной вами рубрики. Однако, в разных шаблонах есть свои нюансы, потому такой метод для вас может и не подойти. Есть облегченный способ, как сделать вывод рубрики в указанном месте — воспользуйтесь специальным плагином WordPress.
Featured Posts with thumbnails
С этим модулем WordPress вы сможете не только настроить вывод рубрики, но и создать привлекательные блоки с определенными записями. Эти блоки можно будет украсить по своему усмотрению, и добавить миниатюры изображений для записей.
Плагин Featured Posts with thumbnails предоставляется бесплатно и работает со всеми версиями движка Вордпресс. С ним вы сможете настроить вывод последних постов, либо задать категории, которые необходимо вывести в блоке. Модуль позволяет создавать блоки с определенным названием, заданным количество записей на странице и выбранным размером миниатюр изображений. Огромное преимущество плагина в том, что вы можете не только настроить вывод категории на странице, но и создать собственный «микс» статей, добавляя их по отдельности.
Posts per Cat
Еще один простой и полезный плагин — Posts per Cat, который поможет вам быстро настроить вывод последних записей указанной рубрики в выбранной части сайта. Кроме того, вы сможете значительно сэкономить визуальное место на странице, так как Posts per Cat позволяет выводить посты в виде нескольких колонок.
Возможности модуля Posts per Cat:
- отображение записей в одной или нескольких колонках (до 4);
- в настройках можно указать ID рубрики, которые вы хотите добавить в блок, и которую вы хотите исключить;
- записи можно сортировать по названиям и другим параметрам;
- можно в превью записи добавить информацию о посте (отобразить количество комментариев, добавить миниатюру изображения, вводный абзац и другое);
- стиль блоков можно настроить при помощи CSS;
- модуль дружит с поисковиками — оптимизирует информацию для ПС-машин.
Content Views
Этот плагин содержит очень много функций. Помимо вывода определенных категорий, вы сможете настроить отображение записей по выбранным тегам, авторам и другим критериям. Дополнение обеспечит создание нескольких колонок, которые можно оформить как угодно. Кроме того, при помощи данного модуля можно изменить меню навигации.
И помните, что вы делаете это (настраиваете вывод записей) не ради красоты, а ради повышения юзабильности вашего блога. Только тот сайт станет успешным, который понятен и интересен посетителям!
Источник
3 способа построения циклов в WordPress — WP_Query<> get_posts() query_posts()
Статья для новичков и тех, кто уже немного знаком с WordPress, которая должна развенчать все мифы использования разных вариантов циклов в WordPress.
О Цикле WordPress и с чем его едят я уже писал и вскользь упоминал о разных вариантах циклов в описаниях функций. В этой статье я сделаю следующий шаг и расскажу о 3-х вариантах построения циклов для вывода записей и о плюсах и минусах каждого из них.
Правильное использование нескольких циклов на странице даст вам возможность выводить блоки с нужными записями, сортировать их в нужном порядке и при этом не переживать о нарушении логической структуры страницы и «ловле» различных багов.
Возможные варианты построения циклов вывода записей:
- Стандартный цикл и цикл на основе query_posts().
- Дополнительный цикл на основе WP_Query().
- Дополнительный цикл на основе get_posts().
Каждый из этих вариантов удобно использовать в разных ситуациях. Для использования каждого варианта не нужно изучать разный мануал, потому что все они работают с одинаковыми параметрами, нужно лишь понять как и где их использовать.
Для лучшего понимания и визуального восприятия работы функций запроса, изучите эту схему:
1) Стандартный Цикл и цикл на основе query_posts()
Я объединил 2 вида циклов (с query_posts() и начинающийся с if( have_posts() ), потому что технически они абсолютно одинаковые.
Давайте вспомним, как выглядит стандартный Цикл WordPress:
Такой код мы можем встретить в файлах index.php , category.php и т.д. Эти файлы отвечают за вывод на странице списка записей. Этот цикл перебирает по очереди посты, которые выводятся на странице и во время перебора, используя Теги Шаблона (предназначенные для использования внутри Цикла), мы можем вывести различные данные поста (заголовок, текст, метаданные и т.д.).
Обратите внимание: в стандартном Цикле мы не указываем никаких данных для выборки записей, а сразу начинаем цикл с if( have_posts() )< while( have_posts() )<… Это говорит о том, что данные уже существуют и их нужно просто обработать и вывести на экран.
«Уже существующие» данные находятся в глобальной переменной $wp_query и для каждого типа страниц WordPress определяются автоматически, т.е. WordPress заранее делает запрос в БД, на основе того какая страница сейчас отображается (категория, метка, статья, постоянная страница и т.д.) и результат запроса записывается в $wp_query , а затем мы используем эти данные для создания цикла. Интересно, что такой запрос делается функцией query_posts() , которую мы разберем ниже.
Обычный Цикл WordPress используется для базовых страниц WP (категории, метки, архивы по дате).
Цикл на основе query_posts()
query_posts() позволяет изменить базовый запрос и вывести нужный нам вариант записей.
Вариант 1
Мы можем изменить базовый запрос (сделать еще один запрос и перезаписать данные предыдущего запроса) и, например, вырезать ненужные категории из вывода или изменить количество выводимых записей, порядок сортировки и т.д.
В этом примере мы создали новый запрос к БД, в котором использовали параметры базового запроса + свои параметры: исключили категории 6 и 9 ( cat=-6,-9 ), а также отсортировали записи по порядку ( order=ASC ) и вывели 20 записей на странице вместо, установленных в настройках 10 ( posts_per_page=20 ).
Полный список параметров, которыми можно сформировать нужный нам вывод, смотрите в описании функции query_posts().
Преимущества такого изменения в том, что если мы, например, изменим количество выводимых записей на странице с 10 (по умолчанию) на 20, то пагинация на странице автоматически подстроится под это изменение, потому что query_post() меняет данные глобальной переменной $wp_query , а пагинация строится именно на основе этих данных. Это лишь один из примеров, показывающий что query_posts() и поведение других функций на странице взаимосвязаны.
Но все же, изменять базовый запрос WP рекомендуется через фильтр pre_get_posts, а не через query_posts() .
Вариант 2
Можно не использовать параметры базового запроса ( $query_string ), а полностью переписать базовый запрос:
Однако, такой подход по сути сотрет базовый запрос и создаст новый, который может быть составлен неправильно, поэтому полностью переписывать базовый запрос не рекомендуется. Лучше постараться решить задачу как-то по-другому.
Необходимость wp_reset_query()
Сбрасывать измененный запрос при использовании query_posts() нужно, потому что query_posts() переписывает глобальную переменную $wp_query которая отвечает за некоторые свойства страницы. Давайте посмотрим на примере.
Предположим нам на странице категории 6 (ID категории), нужно вывести данные только поста 9 (ID поста):
В этом примере мы не сбросили запрос и функция query_posts() переписала глобальную переменную $wp_query . Теперь, кода мы проверим какая это страница (а это страница категории: is_category() == true ), мы увидим, что это уже совсем не страница категории, а страница поста: is_single() == true . Т.е. следующий код вернет нам «Это страница поста», хотя на самом деле это страница категории:
Ошибочка, которая может в последствии создать немало головной боли.
Когда использовать query_posts()?
Когда нужно немного изменить основной (базовый) запрос WordPress. В идеале:
- для исключения рубрики/метки (например, на главной странице).
- изменение направления сортировки.
- ограничения количества выводимых постов
- исключения определенных постов из категории/метки
- и т.п.
И напомню еще раз, для таких задач все же лучше использовать фильтр pre_get_posts.
Не нужно использовать query_posts() для создания нескольких циклов на одной странице, для вывода в сайдбар списка постов, для создания дополнительного вывода записей и т.п. Для этих целей используйте циклы на основе get_posts(). Они используют одни и те же параметры.
2) Цикл на основе WP_Query()
Для вывода постов никак не связанных с текущей страницей или для создания множественных (дополнительных) циклов можно использовать циклы на основе класса WP_Query. Выглядят они аналогично циклам с использование query_posts() . Для WP_Query используются те же самые параметры, что и для query_posts().
Интересно, что WP_Query является ядром функций query_posts() и get_posts() , т.е. обе эти функции работают на основе этого класса.
Пример цикла: выведем все записи из категории 9:
Пример создания множественных циклов на основе WP_Query() :
Особенность циклов на WP_Query() в том, что мы создаем новый объект $query , который никак не связан с аналогичным глобальным объектом $wp_query и поэтому мы никак не нарушаем структуру текущей страницы.
Также, мы можем использовать новый объект в других целях, не только для вывода записей, но и для различного рода проверок: например, записи какой страницы используются в этом новом объекте; можем узнать общее количество записей удовлетворяющих запросу ( $query->found_posts ) и т.д. Такие данные могут пригодится при создании дополнительных запросов с пагинацией или где-то еще (пример в комментариях).
Зачем нужно использовать wp_reset_postdata() ?
В глобальной переменной $post хранятся данные текущего поста (если показывается страница поста, то данные этого поста). Когда срабатывает часть кода $query->the_post() , то в переменную $post записываются данные текущего поста в цикле и в конце цикла в этой переменной остаются данные последнего поста из этого цикла, а нужно чтобы $post всегда содержала данные текущего поста страницы. Т.е. получается до использования цикла $post->ID (ID текущего поста) было равно, допустим, 10, а после срабатывания цикла, та же самая переменная $post->ID уже равна, допустим, 56 (ID последнего поста из цикле), а нужно чтобы она по-прежнему равнялась 10.
wp_reset_postdata() используется как раз для того, чтобы вернуть правильные данные в переменную $post.
Когда использовать WP_Query() ?
Если нужно вывести записи не затрагивая основной цикл (допустим записи в боковой панели), если нужно создать множественные запросы. Вообще, я не вижу никаких преимуществ циклов на WP_Query() над циклами с использованием get_posts() и поэтому рекомендую использовать get_posts() вместо WP_Query() .
3) Цикл на основе get_posts()
Самый удобный вариант выводить нужные записи в нужном порядке — это выводить их с помощью get_posts(). get_posts() чаще всего подходит лучше под вашу задачу, например:
- нужно вывести 10 последних постов в сайдбаре.
- нужно вывести 10 случайных записей в подвале.
- нужно вывести все картинки прикрепленные к посту.
- нужно вывести записи с определенным произвольным полем.
get_posts() так же как и query_posts() работает на основе класса WP_Query() и поэтому передаваемые параметры одинаковые (см. их здесь).
#1. Пример цикла на основе get_posts() . Выведем 5 записей из рубрики 9:
Код выведет именно 5 записей, хотя в аргументах мы указали только номер рубрики. Вызвано это тем, что у функции get_posts() есть параметры по умолчанию (см. описание), о которых нужно помнить. Например, если нам нужно вывести все записи из рубрики 9, то мы должны добавить еще параметр ‘nopaging’ => 1 или ‘posts_per_page’ => -1 (разницы нет).
Когда использовать get_posts()
Всегда, когда нужно просто вывести записи из БД в любом месте шаблона. Когда нужно создать несколько циклов. Так как get_posts() принимает те же параметры что и query_posts(), её очень удобно использовать для вывода записей по самым разным критериям.
Выводы
Где и какой из 3-х вариантов циклов использовать:
query_posts() — если нужно изменить/подправить стандартный вывод записей на страницах WordPress. Можно использовать 1 раз на странице;
get_posts() — если нужно вывести записи из Базы Данных. Можно использовать сколько угодно раз на странице;
Помните, что параметры для всех вариантов одинаковые и описаны они на этом блоге.
Попробуйте уже сейчас заказать комментарии к посту в Инстаграм с привлекательными скидками на сайте doctorsmm. Здесь Вам будут предложены разнообразные форматы текстов на выбор, а также возможность самостоятельно выбрать любое подходящее предложение.
Источник