Используя 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? Вывод свежих записей помогает пользователям легко найти новинки вашего блога. Вы можете вывести последние посты в боковой панели (сайдбаре), внутри контента с помощью шорткода, в конце записи, и в области футера или там, где вам душе угодно. В этой статье мы вам покажем, как вывести последние посты в WordPress с помощью плагинов, виджетов, шорткодов и ручным способом с помощью функции вывода последних записей.

Использование виджета свежих записей

WordPress имеет свой виджет вывода свежих записей, который можно вставить в боковую панель (сайдбар) вашего сайта, или любую другую готовую область для виджетов. Просто перейдите в: Внешний вид » Виджеты и перетащите виджет в область для виджетов вашего сайта.

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

Использование плагина Recent Posts Widget Extended

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

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

В таком случае вам пригодится плагин Recent Posts Widget Extended.

Recent Posts Widget Extended . После активации просто перейдите в: Внешний вид » Виджеты и перетащите виджет Recent Post Extended в сайдбар.

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

Увеличить шрифт можно убрав галочку с «использовать стили по умолчанию» и задав собственные значения.

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

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

Первое, что вам нужно сделать — это установить и активировать плагин Display Posts Shortcode . После активации, плагин сразу заработает, никаких настроек не имеется.

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

Вывод 5 последних записей с миниатюрами и анонсами:

Вывод последних страниц, вместо постов:

Сортировка по названию, вместо даты:

Вывод последних страниц из конкретной родительской страницы:

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

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

Add_filter (‘widget_text’ , ‘do_shortcode’);

Вывод свежих записей вручную

Более продвинутые пользователи могут вывести последние записи вручную, немного добавив код в файлы темы WordPress. Существуют несколько способов сделать это, но самым простым способом является использование встроенного класса WP_Query.

Просто добавьте нижеприведенный код в то место, где вы хотите отобразить свежие записи.


    // Define our WP Query Parameters

    // Start our WP Query
    have_posts()) : $the_query -> the_post(); ?>

    // Display the Post Title with Hyperlink

  • »>
  • // Display the Post Excerpt

  • // Repeat the process and reset once it hits the limit
    endwhile;
    wp_reset_postdata();
    ?>

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

Надеемся, что статья помогла вам узнать как вывести последние записи в 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 отображаются на главной странице, а более старые записи доступны через навигацию по записям на страницах /page/2/ , /page/3/ и так далее. В этой статье мы расскажем, как отображать ваши записи на любой статической странице, используя пользовательский цикл WP_Query , который отлично работает с навигацией по записям.

Например, если вы отображаете статическую страницу в качестве главной страницы (как указано в Настройках чтения ), вы можете захотеть показывать список записей отдельно, например на отдельной странице "blog ". К этому пришел я, когда делал свой блог xy.css , при этом используя статичную (без записей блога) главную страницу. Мне нравится такой подход, поскольку навигация по записям в таком виде работает интуитивно, например, так:

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

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

Создайте пустой шаблон страницы, назовите его page-blog.php и добавьте туда следующий код:

query("showposts=5" . "&paged=".$paged); while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

" title="Read more">

1) { ?>

Собственно, все. Теперь просто подключите его и напичкайте своими собственными параметрами для WP_Query - и готово. Например, вместо того, чтобы отображать 5 записей, вы можете установить showposts=10 или столько, сколько вам будет угодно.

Обратите внимание, что навигация по постам содержит условия, чтобы на первой странице записей (то есть, на вашей странице /blog/ ) не отображалась пустая разметка/стили для ссылки "Следующие записи ". Здесь вы можете узнать больше об оптимизации навигации по записям WordPress.

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

Шаг 2. Добавление новой страницы

Как только вы закончили и загрузили на сайт файл page-blog.php , зайдите в консоль администратора и перейдите на страницу добавления новой страницы. Там создайте новую странице под названием "Blog " (или как вам захочется), установите ее шаблон как "Blog " из панели "Атрибуты страницы ".

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

Заключение

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

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

Массив 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); }