Последние записи на статической главной странице
Я хочу сделать статическую главную страницу на моем сайте WordPress. Я уже настроил это и добавил некоторый контент, следующий шаг - я хочу отобразить 5 последних записей под основным содержимым. На обычной странице это не проблема, но как только я устанавливаю страницу как статическую главную, записи исчезают.
После нескольких часов поиска я понял, что мне нужны 'множественные циклы' в моем шаблоне. Я нашел несколько примеров и пытался реализовать их в своем шаблоне, но безуспешно. Думаю, у меня есть код для вывода последних записей, но возникают проблемы с разметкой и шаблонными тегами для правильного отображения записей.
Надеюсь, это не слишком сложно для понимания, и я действительно ценю любую помощь. Я занимаюсь этим уже 2 дня без какого-либо прогресса. Я могу предоставить любой необходимый код из шаблонов или что-либо еще.
Мой сайт - www.completemuscleandfitness.com
Вот что у меня есть на данный момент
<?php
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Просмотреть '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
который показывает это - www.completemuscleandfitness.com
Как я могу сделать так, чтобы это выглядело красиво, как на других страницах с записями?

Для начала, добро пожаловать!
Я предполагаю, что вы используете файл front-page.php
для отображения главной страницы.
Вам нужно добавить следующий код в ваш front-page.php
:
<h2>Последние записи</h2>
<ul>
<?php
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Посмотреть '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
?>
</ul>
Подробнее о функции wp_get_recent_posts()
можно узнать здесь.
Ваш файл шаблона будет выглядеть примерно так:
<div id="main">
<div class="new_post">
...
</div>
</div>
Вы можете попробовать вставить этот код внутрь <div id="main">
прямо перед закрывающим тегом </div>
:
<div id="main">
<div class="new_post">
...
</div>
<h2>Последние записи</h2>
<ul>
<?php
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Посмотреть '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
?>
</ul>
</div>

Спасибо за ответ! Так как у меня статическая главная страница, я сейчас использую шаблон под названием page-home-2.php. Могу ли я добавить код туда? Сложность для меня в том, чтобы понять, куда именно в шаблоне нужно вставить код?

Вы можете добавить код в файл page-home-2.php
. Я дополню свой ответ, добавив краткое описание, куда именно нужно поместить этот код.

Вы можете создать свой собственный шаблон домашней страницы, аналогичный файлу index.php
в директории вашей активной темы.
Внутри этого файла вы можете создать собственный запрос и перебирать результаты.
Например:
<h2>Недавние записи</h2>
<ul>
<?php
$query = new WP_Query( array ( 'orderby' => 'date', 'order' => 'DESC' ) );
while ( $query->have_posts() ) :
$query->the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
?>
</ul>
Это можно рассматривать как пример реализации. Вы можете развивать его по мере необходимости.
Например:
<?php
// Запрос
$the_query = new WP_Query( $args );
// Цикл
while ( $the_query->have_posts() ) :
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
/* Восстановление оригинальных данных поста
* Примечание: Поскольку мы используем new WP_Query, мы не перезаписываем
* оригинальный $wp_query, и его не нужно сбрасывать.
*/
wp_reset_postdata();
/* Второй запрос (без глобальной переменной) */
$query2 = new WP_Query( $args2 );
// Второй цикл
while( $query2->have_posts() ):
$query2->next_post();
echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
endwhile;
// Восстановление оригинальных данных поста
wp_reset_postdata();
?>
Вы можете получить больше информации здесь. А для работы с множественными параметрами запроса обратитесь к этому.

Спасибо за помощь, я только что вставил первый код в свой index.php, чтобы создать пользовательский шаблон. Теперь у меня отображаются последние записи, но без ссылок, и они просто в виде небольшого списка над моим контентом. Как сделать так, чтобы записи отображались так же, как на других страницах блога, например вот так - http://completemuscleandfitness.com/index.php/training/

Это полностью зависит от DOM-структуры вашей текущей темы. То есть от того, как написана логика отображения через PHP и HTML. Например, вы можете просто скопировать и вставить всю логику отображения записей в ваш пользовательский цикл вместо оператора echo '<li>' . get_the_title() . '</li>';
и убрать обёртку ul
вокруг этого.
Надеюсь, это поможет.

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

Я не совсем понимаю, что вы пытаетесь сказать. Не могли бы вы объяснить подробнее?

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

Спасибо! Вот что у меня есть на данный момент в моем кастомном шаблоне, это показывает посты, но без форматирования - http://pastebin.com/Qq08Z3Fp Следующее - это шаблон блога из моей темы - http://pastebin.com/uJyfbEeg

Я модифицировал код и вот ссылка http://pastebin.com/ubhyxpJV. Просто сделайте бэкап вашего текущего файла шаблона и вставьте весь этот код, и, думаю, все должно заработать.

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

Я внес некоторые правки. Посмотрите вот это http://pastebin.com/QrcBXW0N. Попробуйте заменить текущий код этим и проверьте.

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

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

Хорошо, спасибо, я попробую. Последний вопрос: есть идеи, как мне снова отобразить остальной контент? Сейчас посты занимают всё пространство.

Конечно. Просто добавь эту строку <?php get_template_part('home'); ?>
после <?php
/*
Template Name: Custom Homepage
*/
?>
и, скорее всего, всё заработает. Попробуй, и если не сработает, укажи мне код твоего файла home.php
в директории активной темы. Проверь, существует ли этот файл. Если нет, попробуй выяснить, какой шаблон загружается для строки кода, которую я предложил.

Теперь контент отображается, но как отдельная страница, что довольно странно - www.completemuscleandfitness.com Вот код шаблона - http://pastebin.com/3xDU9w3R и мой home.php - http://pastebin.com/XELee582

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

То же, что и раньше, но метаданные в футере исчезли. Простите за такие сложности...

У вас проблема со структурой DOM. Я вижу часть футера. Просто проверьте правильность структуры DOM, и, думаю, это решит проблему.

Если я ничего не упускаю, мне кажется, что вы все слишком усложняете.
На мой взгляд, виджета "последние записи" должно быть вполне достаточно.
Пример:
Раздел "Последние новости" - это как раз виджет "последние записи".
(Этот сайт еще в разработке - поэтому у меня в поддомене указано "test").
