Вывод произвольных типов записей WordPress. Различные возможности вывода записей на странице WordPress Создаем произвольное поле


Я видел много сайтов на WordPress, у которых на главной странице отображается какая-нибудь статичная страница, а страница блога находится отдельно, например yourwebsite.com/blog .

Как же это реализовать на своём собственной сайте? На самом деле существует два способа — один простой и один не очень, рассмотрим их оба.

Способ 1. Использование index.php в качестве шаблона блога.

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

Кстати, так как в разных темах содержимое файла index.php разное — оно может быть совсем не предназначено для блога, в таких случаях либо меняем сами свой index.php либо воспользуемся вторым способом, который я описал чуть ниже.

Шаг 1. Создание страницы блога.

Ну, что тут сказать, переходим в Страницы > Добавить новую, указываем какой-нибудь заголовок, например Блог и какой-нибудь URL, например blog, после этого сохраняем. Всё, с шагом 1 покончено.

Шаг 2. Настраиваем отображение страниц в настройках.

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

Шаг 3. Последний шаг. Добавляем страницу в меню.

Уже после завершения второго шага при переходе по адресу блога (у нас это yourwebsite.com/blog), у вас будет отображаться страница с записями, использующая шаблон файла index.php .

Тем не менее можно также добавить эту страницу в меню сайта (если поддерживается темой разумеется). Для этого переходим в Внешний вид > Меню , слева в колонке выбираем нашу страницу блога и нажимаем кнопку «Добавить в меню»

Способ 2. Использование собственного шаблона блога. Создание нескольких блогов на одном сайте WordPress.

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

Шагов будет чуть побольше и они будут немного позаковырестей, чем в предыдущем методе. Итак, поехали.

Шаг 1. Создание шаблона страницы

Открываем папку с темой и создаем там файл произвольного названия, например blog-template.php . Внутрь файла вставляем:

Шаг 2. Создаем страницу блога

Этот шаг аналогичен первому шагу из начала поста. Итак, переходим в Страницы > Добавить новую, придумываем название и URL странице, и кроме всего прочего в атрибутах страницы указываем только что созданный нами шаблон.

Сохраняем.

Шаг 3. Плагин постраничной навигации

Однозначно, что нам понадобится постраничная навигация. Скорее всего у вас уже используется какой-то плагин или функция навигации. Если же навигация не будет работать, рекомендую поставить WP_PageNavi — этот плагин работает отлично, я его протестировал, всё ок.

Шаг 4. Шаблон страницы блога

Это голый шаблон блога, без таких важных функций как get_header() , get_footer() и прочего. Просто в данный момент важно понять саму суть.

/* * Template name: Блог */ $current_page = (get_query_var("paged" ) ) ? get_query_var("paged" ) : 1 ; // определяем текущую страницу блога $args = array ( "posts_per_page" => get_option("posts_per_page" ) , // значение по умолчанию берётся из настроек, но вы можете использовать и собственное "paged" => $current_page // текущая страница ) ; query_posts( $args ) ; $wp_query ->is_archive = true ; $wp_query ->is_home = false ; while (have_posts() ) : the_post() ; ?>

/* содержимое поста */ ?>

// функция постраничной навигации

Всё, страница блога создана, вы можете таким образом создать различные страницы блогов с разными параметрами массива $args. Полный список параметров

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

Зачем и когда нужно выводить все записи на одной странице?

В WordPress есть строенная страница архива для каждой рубрики, тегов, авторов и даты.

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

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

Выводим все записи WordPress на одну страницу

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

Мы расскажем о всех трех способов, и начнем с самого простого.

Способ 1: Используем плагин Display Posts Shortcode

Первым делом вам необходимо установить и активировать плагин Display Posts Shortcode .

Плагин работает «из коробки» и не нуждается в дополнительной настройке.

Продолжаем, и создаем новую страницу, называем её «Архивы» или как пожелаете. После этого вставляем в неем следующий шорткод:

Этот шорткод выведет простой список всех заголовков ваших записей в хронологическом порядке. В параметрах шорткода указан лимит на 1000 записей на страницу.

Если же у вас более тысячи постов, то можно изменить это значение. Также вы можете изменить порядок записей на ASC, и при этом записи станут отображаться в обратном хронологическом порядке (сначала старые записи).

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

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

Способ 2: Используем плагин Simple Yearly Archive

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

Для начала вам потребуется установить и активировать плагин Simple Yearly Archive .

После активации переходим на страницу Настройки » Simple Yearly Archive для настройки плагина.

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

Если вы хотите вывести их под названием года, то потребуется добавить

and
рядом с опцией ‘Before / After (Year headline)’.

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

Не забудьте нажать на кнопку сохранения изменений.

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

У плагина есть множество параметров, которые можно использовать в шорткоде. Ознакомиться с полным списком параметров можно на странице документации .

Способ 3: Выводим все записи WordPress на одной странице с помощью кода шаблона

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

Для начала создаем произвольный шаблон страницы и копируем в него оформление из своего файла page.php.

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

"post", "post_status"=>"publish", "posts_per_page"=>-1)); ?> have_posts()) : ?>

    have_posts()) : $wpb_all_query->the_post(); ?>
  • ">

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

Используя 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 выводится заголовок поста с ссылкой на сам пост и контент.

За вывод записей на 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 в любом месте своей темы.

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

Массив WP_Post объектов (записей). Каждый объект в массиве выглядит так:

Array(=> object(WP_Post)#4692 (24) { ["ID"] => int(822) ["post_author"] => string(1) "1" ["post_date"] => string(19) "2016-07-07 10:28:57" ["post_date_gmt"] => string(19) "2016-07-07 07:28:57" ["post_content"] => string(6225) "Контент статьи" ["post_title"] => string(37) "Мертвое море (14 фото)" ["post_excerpt"] => string(15) "Цитата о статье" ["post_status"] => string(7) "publish" ["comment_status"] => string(4) "open" ["ping_status"] => string(4) "open" ["post_password"] => string(0) "" ["post_name"] => string(95) "mertvoe-more-14-foto" ["to_ping"] => string(0) "" ["pinged"] => string(0) "" ["post_modified"] => string(19) "2016-07-07 10:28:57" ["post_modified_gmt"] => string(19) "2016-07-07 07:28:57" ["post_content_filtered"] => string(0) "" ["post_parent"] => int(0) ["guid"] => string(0) "" ["menu_order"] => int(0) ["post_type"] => string(4) "post" ["post_mime_type"] => string(0) "" ["comment_count"] => string(1) "0" ["filter"] => string(3) "raw" } => object(WP_Post){ ... } => object(WP_Post){ ... })

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

get_posts($args);

Шаблон использования

// параметры по умолчанию $posts = get_posts(array("numberposts" => 5, "category" => 0, "orderby" => "date", "order" => "DESC", "include" => array(), "exclude" => array(), "meta_key" => "", "meta_value" =>"", "post_type" => "post", "suppress_filters" => true, // подавление работы фильтров изменения SQL запроса)); foreach($posts as $post){ setup_postdata($post); // формат вывода the_title() ... } wp_reset_postdata(); // сброс $args(строка/массив) Список аргументов, в соответствии с которыми будет получен результат.
По умолчанию: предустановленные

Аргументы параметра $args

С версии WordPress 2.6, в дополнении к нижеописанным параметрам, get_posts() может принимать все те же параметры что и WP_Query .

В get_posts() по умолчанию включен параметр suppress_filters (подавлять фильтры), который в query_posts() и WP_Query отключен - т.е. там фильтры работают. Включение suppress_filters отменяет все фильтры изменения SQL запроса, следующего типа: posts_* или comment_feed_* .

suppress_filters не виляет на работу фильтра pre_get_posts - он будет работать независимо от того что указано в suppress_filters .

Такое отключение фильтров по умолчанию, может ввести в замешательство, если есть плагины влияющие на вывод записей, через фильтры SQL запроса, например WPML. В таких случаях suppress_filters нужно отключить.

В параметр "category" нужно передавать ID, а не название категории. Также "category" можно передать строку: ID через запятую.

numberposts(число) Количество выводимых постов. Установить на 0 , чтобы ограничить вывод максимальным числом постов на страницу (устанавливается в настройках ВП) или поставить -1 чтобы убрать ограничения вывода (LIMIT).
По умолчанию: 5 offset(число) Отступ от первого поста (записи). category(число/строка/массив)

Из каких категорий выводить записи. Укажите ID категории из которой нужно получить посты или укажите, -3 вместо 3 , если нужно получить все записи, кроме записей из категории 3 (исключить категорию). Можно указать несколько ID через запятую ("3,5,12" или "-3,-5,-12").

Смотрите описание параметра cat у WP_Query .

В функциях WP_Query и query_posts() этот параметр отключен по умолчанию (равен false).
По умолчанию: true

Примеры

#1. Вывод постов с отступом

Если у вас на главной выводится один, последний пост, а нужно вывести еще 5 предыдущих из категории 1, то можно использовать такой код:

    5, "offset"=> 1, "category" => 1); $myposts = get_posts($args); foreach($myposts as $post){ setup_postdata($post); ?>
  • ">

#2. Вывод постов с отступом, без нарушения основного цикла.

Если была использована функция get_posts() и после нее нужно использовать стандартный цикл WordPress, то нужно сохранить глобальную переменную $post , делает это так:

    5, "offset"=> 1, "category" => 1); $myposts = get_posts($args); foreach($myposts as $post){ setup_postdata($post); ?>
  • ">

#3. Возможность использовать специальные функции Цикла ВП

Стандартно в цикле основанном на get_posts() невозможно использовать, например, функцию the_content() или the_date() . Эта проблема решается функцией setup_postdata() которой нужно передать переменную $post:

3); $lastposts = get_posts($args); foreach($lastposts as $post){ setup_postdata($post); // устанавливаем данные?>

">

Данные можно также получить через обращение к свойству объекта (объект->свойство_объекта). Например, для этого примера $post->ID будет равно ID поста, $post->post_content будет содержать контент записи. Свойство объекта это колонка таблицы БД posts. Название колонок можно посмотреть .

Не забывайте, что на экран данные выводятся через php оператор echo:

ID; ?>

#4. Последние посты отсортированные по заголовку

Получим последние посты отсортированные по заголовку в алфавитном порядке. Следующий пример выведет дату, заголовок и цитату поста:

10, "order"=> "ASC", "orderby" => "title")); foreach ($postslist as $post){ setup_postdata($post); ?>


#5. Случайные посты

Получим 5 случайных постов, реализуется за счет параметра "orderby" => "rand" :

    5, "orderby" => "rand"); $rand_posts = get_posts($args); foreach($rand_posts as $post) : ?>
  • ">

#6. Получить все прикрепленные файлы

Используется за пределами Цикла WordPress. Следующий код выведет заголовок, ссылку и цитату прикрепленного файла:

"attachment", "posts_per_page" => -1, "post_status" => null, "post_parent" => null); $attachments = get_posts($args); if ($attachments) { foreach ($attachments as $post) { setup_postdata($post); the_title(); the_attachment_link($post->ID, false); the_excerpt(); } } wp_reset_postdata(); ?>

#7. Прикрепленные файлы определенного поста

Код нужно использовать внутри Цикла WordPress, где переменная $post->ID:

"attachment", "posts_per_page" => -1, "post_status" => null, "post_parent" => $post->ID); $attachments = get_posts($args); if ($attachments) { foreach ($attachments as $attachment) { echo apply_filters("the_title" , $attachment->post_title); the_attachment_link($attachment->ID , false); } } wp_reset_postdata(); ?>

#8. Последние записи из той же рубрики

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

term_id; $real_id = get_the_ID(); $args = array("cat" =>$cat_add_id); $posts = get_posts($args); foreach($posts as $post){ setup_postdata($post); if ($post->ID <> $real_id){ ?> ">

Заметки

    С версии 2.6 изменен ряд передаваемых значений у параметра orderby - префикс post_ был удален, например, было post_title, стало просто title.

  • С версии 3.0 параметрам include и exclude можно передавать и массивы ID.

Хотите дешево купить просмотры в Инстаграме на видео или ТВ-трансляцию, но не знаете, где? Попробуйте посетить сайт Doctor SMM , где Вам будет предложена одна из самых низких цен по рунету на просмотры. Торопитесь, так как предложение действует ограниченное время! К тому же здесь Вы сможете очень быстро приобрести ресурс с оптимальным, конкретно для Вашей страницы, скоростным режимом. Развивайте аккаунт быстро и легко!

Заметки

  • Смотрите: WP_Query::parse_query()

Список изменений

С версии 1.2.0 Введена.

Код get posts : wp-includes/post.php WP 5.2.3

5, "category" => 0, "orderby" => "date", "order" => "DESC", "include" => array(), "exclude" => array(), "meta_key" => "", "meta_value" => "", "post_type" => "post", "suppress_filters" => true,); $r = wp_parse_args($args, $defaults); if (empty($r["post_status"])) { $r["post_status"] = ("attachment" == $r["post_type"]) ? "inherit" : "publish"; } if (! empty($r["numberposts"]) && empty($r["posts_per_page"])) { $r["posts_per_page"] = $r["numberposts"]; } if (! empty($r["category"])) { $r["cat"] = $r["category"]; } if (! empty($r["include"])) { $incposts = wp_parse_id_list($r["include"]); $r["posts_per_page"] = count($incposts); // only the number of posts included $r["post__in"] = $incposts; } elseif (! empty($r["exclude"])) { $r["post__not_in"] = wp_parse_id_list($r["exclude"]); } $r["ignore_sticky_posts"] = true; $r["no_found_rows"] = true; $get_posts = new WP_Query; return $get_posts->query($r); }
Выбор редакции
Виртуальная реальность и VR игры начинают формировать новую игровую среду для пользователей Android. Но, так как это новое поле для...

10.08.2016 Frenk 0 Коментариев Обновление Windows 10 могут быть разными 10041, 9860, 1511, 10586 – в будущем скорее всего...

Итак, наконец-то у вас есть мобильное зарядное устройство (Power Bank) . Поздравляем! Купить Power Bank в Украине - очень правильное...

Онлайн-игры в последнее время набирают все большую популярность, особенно те, что предоставляют своим игрокам огромные возможности по...
Если когда-либо в мир гитарной музыки приходил настоящий гений, то его имя Джеймс Маршалл Хендрикс, известный всему миру как Джими...
Для однозначного определения положения точки в пространстве необходимо и достаточно иметь проекции на двух плоскостях проекций, но в...
Блок-схема представляет последовательные этапы задачи или процесса. Существует много разных макетов SmartArt, которые можно использовать...
Вы давно интересуетесь, как сделать много лайков в ВК? В таком случае мы предлагаем вам воспользоваться нашим уникальным предложением.!...
Вкладка ввода средств в My Lands My Lands – это игра, которая позиционирует себя как способ заработать реальные деньги посредством...