Отображение записей блога на любой странице (с навигацией). Вывод произвольных типов записей WordPress Отображение дочерних страниц для родительской в WordPress

Главная / Программы

Статья для новичков и тех, кто уже немного знаком с WordPress, которая должна развенчать все мифы использования разных вариантов циклов в WordPress.

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

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

Разработчики WordPress предоставляют следующие варианты построения циклов вывода записей:

  1. Стандартный цикл и цикл на основе query_posts() ;
  2. WP_Query() ;
  3. Дополнительный цикл на основе get_posts() .

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

Для лучшего понимания и визуального восприятия работы функций запроса, изучите эту схему:

1) Стандартный Цикл и цикл на основе query_posts()

Я объединил 2 вида циклов (с query_posts() и начинающийся с if(have_posts()), потому что технически они абсолютно одинаковые.

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

id="post-">

">

Записей нет.";

Такой код мы можем встретить в файлах 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() и поведение других функций на странице взаимосвязаны.

Вариант 2

Можно не использовать параметры базового запроса ($query_string), а полностью переписать базовый запрос:

Query_posts("cat=-6,-9&order=ASC");

Однако, такой подход по сути сотрет базовый запрос и создаст новый, который может быть составлен неправильно, поэтому полностью переписывать базовый запрос нужно аккуратно, со знанием дела.

Необходимость wp_reset_query()

Сбрасывать измененный запрос при использовании query_posts() нужно, потому что query_posts() переписывает глобальную переменную $wp_query которая отвечает за некоторые свойства страницы. Давайте посмотрим на примере.

Предположим нам на странице категории 6 (ID категории), нужно вывести данные только поста 9 (ID поста):

В этом примере мы не сбросили запрос и функция query_posts() переписала глобальную переменную $wp_query . Теперь, кода мы проверим какая это страница (а это страница категории: is_category() == true), мы увидим, что это уже совсем не страница категории, а страница поста: is_single() == true . Т.е. следующий код вернет нам «Это страница поста», хотя на самом деле это страница категории:

If(is_category()) echo "Это страница категории"; // не сработает if(is_single()) echo "Это страница поста"; // сработает

Ошибочка, которая может в последствии создать немало головной боли.

Когда использовать query_posts()?

Когда нужно немного изменить основной (базовый) запрос WordPress. В идеале: для исключения рубрики/метки (например, на главной странице); изменение направления сортировки; ограничения количества выводимых постов; исключения определенных постов из категории/метки и т.п.

Не нужно использовать query_posts() для создания нескольких циклов на одной странице, для вывода в сайдбар списка постов, для создания дополнительного вывода записей и т.п., для этих целей используйте циклы на основе get_posts(). К тому же, обе функции понимают параметры одинаково! Так зачем "платить" больше?..

2) Цикл на основе WP_Query()

Для вывода записей никак не связанных со страницей или создания множественных (дополнительных) циклов можно использовать циклы на основе класса WP_Query . Выглядят они аналогично циклам с использование query_posts() . Для WP_Query используются те же самые параметры, что и для query_posts().

Интересно, что WP_Query является ядром функций query_posts() и get_posts() , т.е. обе эти функции работают на основе этого класса.

Пример цикла: выведем все записи из категории 9:

have_posts()){ while($query->have_posts()){ $query->the_post(); ?>

">

Пример создания множественных циклов на основе WP_Query() :

have_posts()){ $query1->the_post(); // вывод записей } wp_reset_postdata(); // Цикл 2 $query2 = new WP_Query("cat=-2&nopaging=1"); // все посты, кроме категории 2 while($query2->have_posts()){ $query2->the_post(); // вывод записей } wp_reset_postdata(); // Цикл 3 $query3 = new WP_Query("cat=-3&nopaging=1"); // все посты, кроме категории 3 while($query3->have_posts()){ $query3->the_post(); // вывод записей } wp_reset_postdata(); ?>

Особенность циклов на 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.

#1. Пример цикла на основе get_posts() . Выведем 5 записей из рубрики 9:

9)); foreach($myposts as $post){ setup_postdata($post); // стандартный вывод записей } wp_reset_postdata(); // сбрасываем переменную $post ?>

Код выведет именно 5 записей, хотя в аргументах мы указали только номер рубрики. Вызвано это тем, что у функции get_posts() есть параметры по умолчанию (см. описание), о которых нужно помнить. Например, если нам нужно вывести все записи из рубрики 9, то мы должны добавить еще параметр "nopaging" => 1 или "posts_per_page" => -1 (разницы нет).

Когда использовать get_posts()

Всегда, когда нужно просто вывести записи из БД в любом месте шаблона. Когда нужно создать несколько циклов. Так как get_posts() принимает те же параметры что и query_posts(), её очень удобно использовать для вывода записей по самым разным критериям.

Выводы

Где и какой из 3-х вариантов циклов использовать:

    query_posts() - если нужно изменить/подправить стандартный вывод записей на страницах WordPress. Можно использовать 1 раз на странице;

    get_posts() - если нужно вывести записи из Базы Данных. Можно использовать сколько угодно раз на странице;

  • WP_Query() - во всех других случаях когда не подошли query_posts() и get_posts(). Класс WP_Query() является ядром query_posts() и get_posts() и может быть использован для каких-либо сложных случаев вывода.

Помните, что параметры для всех вариантов одинаковые и

Здравствуйте уважаемые читатели блога WP Developer. В статье « » я рассказывал, что это такое такое, приводил пример стандартных типов записей и описывал процесс их создания. Но сам процесс создания не является конечным, т.к. записи потом нужно как то выводить на сайте. Как раз в этой статье я хотел бы показать Вам два способа вывода архива таких статей (без пагинации и с пагинацией) и показать, как выводить отдельную произвольную запись. Все манипуляции я буду производить в стандартной теме WordPress — twentyseventeen . Итак, поехали.

Вывод всех записей на одной странице (без пагинации)

Иногда требуется вывести архив произвольного типа записей на одной странице. Ну мало ли какие могут быть требования у заказчика. Вдруг ему понадобится именно такой вариант вывода. Для примера я создал новый тип записей Отзывы с идентификатором reviews . Сам процесс описывать не буду. Для этого Вы можете кликнуть по ссылке , где все подробно описано. Я лишь только визуально покажу, как это выглядит в меню (См. рисунок):

На следующем шаге в папке с Вашей темой нужно создать отдельный шаблон для вывода архива. Я назвал его reviews.php . Внутри этого шаблона прописываем следующий комментарий:

Увидев этот комментарий кто-то может уже догадался, что мы создаем . Да, так и есть. В него также я добавил следующий код для получения и вывода самих отзывов:

"reviews", "posts_per_page" => -1)); ?>

have_posts()) : while ($reviews->have_posts()) : $reviews->the_post(); ?>

">

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

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

Вывод постов в виде категории (с пагинацией)

Если Вам необходимо вывести список произвольного типа записей с пагинацией, т.е. как выводится любая из рубрик, то в папку с Вашей темой всего лишь нужно добавить новый файл со следующим названием — archive-{идентификатор_произвольного_типа_записей}.php . В моем случае этот файл будет называться так — archive-reviews.php . Далее в файл добавляете цикл вывода (уже без комментария Template Name: Отзывы) и посты будут выводиться как категории — с пагинацией. Код может выглядеть так:

have_posts()) : while ($reviews->have_posts()) : $reviews->the_post(); ?>

">

Как Вы заметили, мы уже не получаем посты при помощи класса WP_Query , в этом нет необходимости. WordPress сам поймет, к какому типу записей относится данный шаблон и выведет именно их.

Теперь при переходе по данной ссылке у вас может появиться примерно такое сообщение — «Извините, но запрашиваемая Вами страница не найдена «. Данная проблема решается довольно простым способом. Нужно перейти в раздел Настройки->Постоянные ссылки и ничего не меняя нажать на кнопку Сохранить.

Вывод отдельной записи произвольного типа

Итак, мы выяснили как можно выводить архив произвольного типа записей с пагинацией и без нее. Теперь нам осталось вывести отдельный пост. В принципе, если Вас устраивает внешний вид страницы, которая в текущий момент выводит отдельный пост, то можете ничего и не создавать, с этим справится файл single.php . Если же Вы хотите изменить внешний вид нового типа записей, например, убрать сайдбар или вообще по другому стилизовать страницу, то нужно создать файл со следующим названием — single-{идентиикатор_произвольного_типа_записей}.php , и в нем уже прописать код для вывода поста с нужными стилями. В моем случае он будет называться так — single-reviews.php .

На этом все. Надеюсь статья была для Вас полезной. Всем удачи!!!

За вывод записей на WordPress у нас отвечает отдельный файл шаблона – single.php . Однако, это вывод одной записи внутри цикла, который определяется функциями бесплатного движка и не создает никакой сложности. Но как вывести записи wordpress на другой странице или же на главной странице?


get_posts()

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

Итак, принцип работы функции:

$posts = get_posts($args);

Как вы понимаете, в переменной $args мы задаем все необходимые параметры вывода наших постов. В переменной posts мы получаем массив данных, который готов к выводу в цикле. После завершения цикла не забываем использовать функцию wp_reset_postdata() , которая позволит нам избежать багов на странице с дополнительными циклами, связанными с выводом записей. Наш код будет выглядеть следующим образом:

9 , "category" => 1, "orderby" => "date"); $myposts = get_posts($args); foreach($myposts as $post){ setup_postdata($post); ?>

">

Это уже полностью готовый код для вставки в нужное для вас место шаблона вашей темы. Немного поясню по поводу заданных аргументов. В параметре numberposts мы задаем количество выводимых записей, в category – указываем ID категории, а orderby у нас отвечает за сортировку по дате.

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

Всем привет дорогие друзья! С вами в открытом режиме говорит и рассказывает и показывает на практике Макс Метелев.

И сегодня на закуску вам с утра порция полезного материала следующего содержания – мы с вами научимся выводить список страниц wordpress с картинками. Урок очень простой и интересный. Поехали.

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

Помимо основного способа вывода страниц wordpress с превьюшками мы покажем как вывести дочерние страницы и родительские.

Будет выглядеть это примерно так:

Первое, что вам нужно сделать это установить и активировать плагин Page-list. Он работает прямо «из коробки», потому в настройки в мы лезть не будем, так как их там нет.

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

Создайте новую страницу в WordPress и добавьте в нее следующий шорткод [ pagelist ]

Этот шорткод покажет простой вложенный всех ваших страниц.

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

add_filter("widget_text","do_shortcode");

add_filter ("widget_text" , "do_shortcode" ) ;

Отображение дочерних страниц для родительской в WordPress

Все что вам нужно это добавить нужный шорткод [ subpages ] на страницу родителя.

Также вы можете использовать короткие коды для вставки в текстовые виджеты.

Добавление родственных страниц на Вордпресс

Родственные страницы это, по сути, дочерние, которые имеют одного общего родителя. Вывод таких страниц wordpress осуществляется с помощью следующей конструкции [ siblings ]

Вывод страниц с превьюшками и отрывком текста

Плагин Page-list идет в комплекте со следующим кодом [ page_ext ] . Этот код для вставки дает расширенные возможности для отображения списков страниц в WordPress.

Вы можете использовать его, чтобы отобразить структуру страниц с характерным изображением статьи и небольшим отрывком текста из нее. Как здесь:

[ pagelist_ext show_image = "1" image_width = "50" ]

Вы можете самостоятельно задавать размер изображения, используя параметр image_width

Также вы можете контролировать длину отрывка текста используя параметр limit_content

Например можете задать 100 знаков, пример [ pagelist_ext limit_content = "100" ]

Если вы не хотите отображать текст возле миниатюры к статье, тогда используйте следующий короткий код для страницы [ pagelist_ext show_content = "0" ]

Спасибо за внимание и удачного изучения!

Используя WordPress , как обычный блоговый движок с готовой темой, подобный вопрос у нас бы не возник. Мы просто не вмешиваемся в алгоритмы работы CMS , записи сами как-то выводятся. В каком случае вывод записей WordPress нас начинает интересовать?

Тогда, когда мы собираемся из статичной HTML верстки сделать уникальную WordPress тему. А точнее, мы хотим предложить свои услуги по натяжки верстки на WordPress . Так вот, без умения выводить записи WordPress в любом месте сайта - вам будет никак не обойтись.

Структура темы под WordPress

Что представляет из себя тема WordPress ? Это набор файлов (шаблоны), состоящих из HTML кода вперемешку с PHP кодом. В любой теме, как минимум должны быть два файла: index.php и CSS файл стилей. HTML код - это и есть верстка уникального дизайна, а PHP код состоит из функций и тегов, уже описанных в ядре WordPress , файлы ядра мы никогда не трогаем.

Запомните, что весь HTML код должен находится за пределами открывающих и закрывающих тегов PHP . Напротив, весь PHP код пишется только внутри тегов. Например выведем имя автора записи в цикле WordPress:

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

Теги шаблонов вывода записей WordPress

the_permalink
the_title
the_time
the_content
the_author
the_excerpt
the_category

С помощью этих тегов шаблонов выводятся статьи на главной странице WordPress в шаблоне index.php .

">

Выводим дату создания записи:

Давайте выведем саму статью - контент, внутри тега div:



Внимание! Ничего не вывелось. Почему? Поскольку эти теги шаблонов выводят только внутри цикла, вне цикла они не работают. Мы должны весь этот код, поместить внутри цикла. Весь PHP и HTML код внутри цикла повторится столько раз, сколько будет у нас записей. Смотрите код ниже.



Сюда помещаем, весь код выше. Мы находимся внутри цикла.



Давайте разберем, что означает код выше. Мы задаём условие, если в базе данных имеются записи, то будет выводится заголовок, дата создания и контент записи.

Если посты есть, то в цикле while выполняется функция the_post , которая занимается выводом всех записей , до тех пор, пока они есть.

Закончили цикл и условие.


Цикл будет работать до тех пор, пока имеются записи, количество вывода записей на страницу задаётся в настройках блога. Если записей больше, то на страничке появятся элементы пагинации. Таким образом на блоге будут выведены все записи, и WordPress автоматически создаст страниц столько, сколько надо.

Мы познакомились лишь с некоторыми функциями для построения темы для WordPress - это функции вывода записей . Однако здесь важно понять принцип, а не пытаться запомнить или заучить.

Практика

Рассмотрим вывод записей на примере темы Twenty Seventeen . Записи выводятся через тег шаблона get_template_part в цикле шаблона index.php , который передаёт в параметрах содержимое шаблона content.php .

if (have_posts()) :
/* Start the Loop */
while (have_posts()) :
the_post();
get_template_part("template-parts/post/content", get_post_format());
endwhile;
endif; ?>

В шаблоне content.php выводится заголовок поста с ссылкой на сам пост и контент.

© 2024 splav38.ru -- Новости. Советы. Обзоры. Программы. Безопасность