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

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

  • http://xycss.com/blog/ — отображает последний записи в блоге
  • http://xycss.com/blog/page/2/ — отображает вторую страницу записей
  • http://xycss.com/blog/page/3/ — отображает третью страницу записей

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

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

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

<?php 
/*
	Template Name: Blog
*/
?>
<?php get_header(); ?>

	<article>

		<?php // Display blog posts on any page @ http://m0n.co/l
		$temp = $wp_query; $wp_query= null;
		$wp_query = new WP_Query(); $wp_query->query('showposts=5' . '&paged='.$paged);
		while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

		<h2><a href="<?php the_permalink(); ?>" title="Read more"><?php the_title(); ?></a></h2>
		<?php the_excerpt(); ?>

		<?php endwhile; ?>

		<?php if ($paged > 1) { ?>

		<nav id="nav-posts">
			<div class="prev"><?php next_posts_link('&laquo; Previous Posts'); ?></div>
			<div class="next"><?php previous_posts_link('Newer Posts &raquo;'); ?></div>
		</nav>

		<?php } else { ?>

		<nav id="nav-posts">
			<div class="prev"><?php next_posts_link('&laquo; Previous Posts'); ?></div>
		</nav>

		<?php } ?>

		<?php wp_reset_postdata(); ?>

	</article>

<?php get_footer(); ?>

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

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

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

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

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

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

Заключение

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

Источник: digwp.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

38 комментариев

сначала новые
по рейтингу сначала новые по хронологии

Простите, если пишу непонятно, я новичок, сама осваиваю Вордпресс. Вопрос такой: есть тема Avata, у нее красивый дизайн главной страницы, с различными блоками, типа "Чем полезен сайт" и "Наша команда". Блок "Последние записи" в ней есть, но внизу и одной, если можно так выразится, строкой. Так вот, если я поставлю в настройках "показывать статическую страницу", вся эта красота исчезает, а мне хотелось бы, чтобы оставался и шаблон главной страницы, и пункт "записи блога" в меню. Как это сделать?

Алексей

У меня по умолчанию "настройки" "чтение" по умолчанию стоит "На страницах блога отображать не более 9 записей". Меняю 9 на любое другое - сохраняюсь- 9 как и прежде висит в значениях.

Может кто знает как проблему решить?

Евгений

На 12 строке в примере есть такой параметр 'showposts=5' меняйте цифру здесь. Хотя я могу ошибаться.

Добрый вечер, может быть такое что данный код выводит с каждой записью лишний тек !??
Миниатюры я вывожу так : если кому до сих пор интересно

Добрый вечер, может быть такое что данный код выводит с каждой записью лишний тек !??
Миниатюры я вывожу так : если кому до сих пор интересно

the_post_thumbnail('350x190');

Владислав

Доброго времени, подскажите пожалуйста, как сделать отображение записей миниатюрами, а не списком или как сделать так, чтобы код использовал стандартное оформление записей?

Если вы не хотите разбираться с кодом, то проще подобрать тему, которая изначально умеет выводить записи миниатюрами. Благо, таких тем на сегодня достаточно.

Владислав

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

А у меня не работает! Что делать?

Андрей

как вывести миниатюры записей с помощью этого кода?

Дмитрий

Благодарю! Полдня искал рабочий код, который выводит все записи сайта на одну страничку, плюс при этом должна работать навигация. Ваше решение - единственное, которое работает. Разумеется, пришлось чуть подправить под свою тему (создана мною с нуля) и все ок! Использую эту страничку в качестве хтмл карты сайта. Очень-очень-очень доволен и благодарен.

Андрей

Подскажите а у вас миниатюра записи выводится? у меня нет.

Анастасия

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

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

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

Анжелика Ворун/Людмила Картович

В моём творческом блоге убраны функции "Добавить", "редактировать" и в комментариях как в блоге так и на странички блога и даже своей странички запрашивают подтверждение, словно это не моя страничка. Новые темы не добавляет и редактировать своих стихов тоже не включается. В настройках снята функция "отображать новую тему". Какие шаги мне нужно предпринять? Пытаюсь уже две недели добиться в чём дело и как сделать чтобы блог заработал. Блог был комиссией одобрен и оставлен в Моём мире. Прошу помощи.

Виктор

Помогите, пожалуйста. У меня в блоге в самом низу страницы есть кнопка "Загрузить ещё". Когда её просто так нажимаешь, то открывается новая страница и она полостью пустая. Если же нажать правой кнопкой мыши "открыть ссылку в новой вкладке", то кнопка срабатывает и откроется page 2.
С чем может быть связана такая проблема? И как её исправить?
Вот ссылка на мой блог, если это нужно
http://idevice-blog.ru/i-blog/

Сергей Владимирович

Очень пригодилось, но отображается вот как: http://campguru.ru/blog/ без миниатюр картинок. Не красиво... Код полностью ваш использовал. Что то наверное нужно добавить в код, чтобы выводилась и миниатюра.. Не подскажите что?

очень полезная статья, а как сделать в 2 или три колонки новости?

Кирилл

Хорошая статья, прям почти то что искал.

Как заставить данный код выводить записи конкретной категории?

Стоит задача выводить две страницы записей из разных категорий и разными шаблонами страниц.

Вадим Волос

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

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

Вадим Волос

А вот нашел плагин
Advanced Category Excluder
http://wordpress.org/plugins/advanced-category-excluder/screenshots/

Вадим Волос

тут нашел http://iglous.ru/kak-v-wordpress-skryt-zapisi-rubriki-s-glavnoj-stranicy-i-rss/

Откройте файл functions.php, и в самом низу, перед знаком ?> вставьте данный код:

// фильтр рубрик
function hidecategory($query) {
if ($query->is_feed || ($query->is_home && !(is_paged())))
{$query->set('cat','-104, -57');}
return $query; }
add_filter('pre_get_posts','hidecategory');
// конец фильтра рубрик

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

Вы можете прикрепить 2 записи (в админке) т.е. сделать их постоянно видимыми вверху страницы, или реализовать это через custom post types, добавив на главную страницу отдельный блок с вашими избранными записями.

В админке не нашел как прикрепить на главную две статические страницы. А custom post types это плагин? В нем можно именно статические страницы вывести?

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

Custom post types - это не плагин, а возможность создавать отдельные типы записей с отдельными параметрами. Читайте подробнее: http://wpcafe.org/tutorials/custom-post-types-polzovatelskie-taksonomii-filtryi-i-arhivyi-v-wordpress/ и http://wpcafe.org/tutorials/kak-ispolzovat-kastomnyie-polya-dlya-sozdaniya-meta-blokov-s-obzorami/

обычные статьи "Записи можно" прилепить. А статические страницы к сожалению нет такой функции

Спасибо за статью, довольно-таки познавательно, но вот у меня вопрос созрел, а можно ли как в wordpress сделать так, что бы на главной странице отображалось 3 записи, а на второй допустим 6? Это было бы полезно когда на главной есть слайдер, зачастую он занимает определенное пространство и после перехода на вторую страницу, если количество записей минимально виджеты смотрятся не юзабельно, иногда даже вылазят за WP PageNavi

Честно говоря, не встречал плагинов с подобной функциональностью. Скорее всего подобное можно реализовать только самостоятельно, внеся определенные правки в тот же WP PageNavi

Установила WP Page Numbers. Навигация появилась, но на главной страце отображаются все записи сайта, хотя в настройках поставила 6. Как сделать, чтобы отображалось нужно количество записей (как в настройках) на главной?

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

А если мне нужно одновременно "вести" несколько лент (страниц), на которых отображаются записи с разными категориями? Например на странице "Новости" - только новости, а на странице "Блог" - все остальное, но тоже, конечно, с навигацией..

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

Спасибо) полезная информация!!!