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


По умолчанию последние записи в 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); }

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

Для удобства посетителей, и для ускорения индексации статей поисковыми системами создаются карты (содержание) сайта, как в формате XML, так и в HTML. В XML-формате карта сайта подходит только для поисковых систем, а в HTML можно вывести все записи, и она ориентирована посетителей, но для поисковиков это тоже плюс.

Небольшое отступление от темы.
Решил сделать небольшой редизайн блога. Целый вечер редактировал стили сайдбара. Как видите, теперь он другого цвета + обновленная .
Сам шаблон блога теперь «нерезиновый» и имеет фиксированную ширину, а под каждым постом добавил социальные кнопки от Addthis. Вот такие дела

Вернемся к главному — списку всех статей блога на одной странице.

Хотел я сделать HTML-карту блога с помощью плагина , но мне он не понравился тем, что если запись принадлежит двум рубрикам, то названия записей повторяются, то есть получается такой эффект, как будто на блоге в несколько раз больше записей, чем на самом деле. Карта блога представляет из себя следующую структуру, (если записи выводить по рубрикам):



Дата записи / Название записи из рубрики 1
Дата записи / Название записи из рубрики 1 и рубрики 2 // повтор названия записи!

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

В итоге я решил сделать простой нумерованный список всех записей блога по убыванию (по дате публикации) .

Итак, приступим.

Создаем копию файла темы page.php и переименовываем его во что-нибудь другое, например soderzhanie.php. После открываем в редакторе NotePad++ и изменяем код:

До редактирования код выглядит примерно так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

"" ) ) ; comments_template() ; endwhile ; } get_footer() ; ?>

"")); comments_template(); endwhile; } get_footer(); ?>

Оставляем только функции вывода header-a и footer-a, а content нам нафиг не нужен

Туда, где написано Здесь был Вася «Здесь будет код для вывода всех записей блога!» Вставляем следующий код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 "post" , "post_status" => "publish" , "posts_per_page" => - 1 , "caller_get_posts" => 1 if ($moi_zapros -> have_posts () ) : print "Все посты: пример" . "

Все записи блога:

    " ; while ($moi_zapros -> have_posts () ) : $moi_zapros -> the_post () ; ?>
  1. " target="_blank">
  2. ?>

"post", /* Отбираем только записи. */ "post_status" => "publish", /* И только опубликованные. */ "posts_per_page" => -1, /* Снимаем ограничение на количество показываемых записей на одну страничку. */ "caller_get_posts" => 1 /* Игнорируем особенности записей-липучек. */);$moi_zapros = null;$moi_zapros = new WP_Query($parametri); /* Формируем новый "нестандартный" запрос. */if ($moi_zapros->have_posts()): print "Все посты: пример". "

Все записи блога:

    "; while ($moi_zapros->have_posts()) : $moi_zapros->the_post(); ?>
  1. " target="_blank">
  2. ";endif;wp_reset_query(); /* Сбрасываем нашу выборку. */?>

    Окончательный код файла soderzhanie.php:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 /** * Template name: Все посты // имя шаблона страницы */ $parametri = array ( "post_type" => "post" , /* Отбираем только записи. */ "post_status" => "publish" , /* И только опубликованные. */ "posts_per_page" => - 1 , /* Снимаем ограничение на количество показываемых записей на одну страничку. */ "caller_get_posts" => 1 /* Игнорируем особенности записей-липучек. */ ) ; $moi_zapros = null ; $moi_zapros = new WP_Query($parametri ) ; /* Формируем новый "нестандартный" запрос. */ if ($moi_zapros -> have_posts () ) : print "Все посты: пример" . "

    Все записи блога:

      " ; while ($moi_zapros -> have_posts () ) : $moi_zapros -> the_post () ; ?>
    1. " title="Постоянный линк для: " target="_blank">
    2. " ; endif ; wp_reset_query() ; /* Сбрасываем нашу выборку. */ ?>

    "post", /* Отбираем только записи. */ "post_status" => "publish", /* И только опубликованные. */ "posts_per_page" => -1, /* Снимаем ограничение на количество показываемых записей на одну страничку. */ "caller_get_posts" => 1 /* Игнорируем особенности записей-липучек. */);$moi_zapros = null;$moi_zapros = new WP_Query($parametri); /* Формируем новый "нестандартный" запрос. */if ($moi_zapros->have_posts()): print "Все посты: пример". "

    Все записи блога:

      "; while ($moi_zapros->have_posts()) : $moi_zapros->the_post(); ?>
    1. " title="Постоянный линк для: " target="_blank">
    2. ";endif;wp_reset_query(); /* Сбрасываем нашу выборку. */?>

      Хотели бы вы вывести все ваши записи 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.

Выбор редакции
Откуда это блюдо получило такое название? Лично я не знаю. Есть еще одно – «мясо по-капитански» и мне оно нравится больше. Сразу...

Мясо по-французски считается исконно русским блюдом, очень сытное блюдо, с удачным сочетанием картофеля, помидоров и мяса. Небольшие...

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

Бананово-шоколадную пасту еще называют бананово-шоколадным крем-джемом, поскольку бананы сначала отвариваются и масса по консистенции и...
Всем привет! Сегодня в расскажу и покажу, как испечь открытый пирог с адыгейским сыром и грибами . Чем мне нравится этот рецепт — в нём...
Предлагаю вам приготовить замечательный пирог с адыгейским сыром. Учитывая, что пирог готовится на дрожжевом тесте, его приготовление не...
Тыква очень часто используется в качестве начинки, причем как в сладких, так и несладких блюдах. С ней готовят самсу, разнообразные...
Если вы не новичок в кулинарии, то знаете, что обязательными ингредиентами классических сырников являются творог, мука и яйцо, но уж...
Сырники популярны у многих славянских народов. Это национальное блюдо русских, украинцев и белорусов. Изобрели их экономные хозяйки,...