Последние записи на статической главной странице
Я хочу сделать статическую главную страницу на моем сайте 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. Могу ли я добавить код туда? Сложность для меня в том, чтобы понять, куда именно в шаблоне нужно вставить код?
user27348
Вы можете добавить код в файл page-home-2.php. Я дополню свой ответ, добавив краткое описание, куда именно нужно поместить этот код.
Mike Madern
Вы можете создать свой собственный шаблон домашней страницы, аналогичный файлу 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/
user27348
Это полностью зависит от DOM-структуры вашей текущей темы. То есть от того, как написана логика отображения через PHP и HTML. Например, вы можете просто скопировать и вставить всю логику отображения записей в ваш пользовательский цикл вместо оператора echo '<li>' . get_the_title() . '</li>'; и убрать обёртку ul вокруг этого.
Надеюсь, это поможет.
Rohit Pande
Получаю много информации, очень признателен. Вроде понимаю, о чём вы говорите. Думаю, именно здесь я упираюсь в стену. Раньше у меня получалось выводить последние записи, но не могу разобраться с их правильным отображением. Просто не могу это осознать. Если я размещу шаблон блога другой темы, кто-нибудь сможет помочь на его основе?
user27348
Я не совсем понимаю, что вы пытаетесь сказать. Не могли бы вы объяснить подробнее?
Rohit Pande
Хорошо, я могу вывести последние записи на моей статической странице, но они отображаются неаккуратно. Вероятно, мне нужно вставить какой-то код в мою пользовательскую страницу, чтобы записи отображались в стандартном формате темы. Я просто не знаю, какой код нужно вставить и куда, возможно, этот код можно взять из другого шаблона темы? Я спрашиваю: если я опубликую шаблон темы, сможете ли вы помочь мне разместить код там, где это необходимо?
user27348
Спасибо! Вот что у меня есть на данный момент в моем кастомном шаблоне, это показывает посты, но без форматирования - http://pastebin.com/Qq08Z3Fp Следующее - это шаблон блога из моей темы - http://pastebin.com/uJyfbEeg
user27348
Я модифицировал код и вот ссылка http://pastebin.com/ubhyxpJV. Просто сделайте бэкап вашего текущего файла шаблона и вставьте весь этот код, и, думаю, все должно заработать.
Rohit Pande
Спасибо за ваши усилия, Rohit, я вставил код в мой кастомный шаблон и активировал его, но последние посты не отображаются на моей главной странице?
user27348
Я внес некоторые правки. Посмотрите вот это http://pastebin.com/QrcBXW0N. Попробуйте заменить текущий код этим и проверьте.
Rohit Pande
Мы на правильном пути! Теперь отображаются последние записи, почти так как должно быть, но они зацикливаются, поэтому показываются 3 записи непрерывно. Также исчезло оригинальное содержимое страницы. Еще раз, не могу выразить, как я ценю вашу помощь.
user27348
Изучите различные параметры запроса, думаю, вы сможете это настроить. Вы можете ознакомиться с параметрами здесь. Попробуйте изменить параметры, чтобы получить нужное количество записей согласно вашим критериям.
Rohit Pande
Хорошо, спасибо, я попробую. Последний вопрос: есть идеи, как мне снова отобразить остальной контент? Сейчас посты занимают всё пространство.
user27348
Конечно. Просто добавь эту строку <?php get_template_part('home'); ?> после <?php
/*
Template Name: Custom Homepage
*/
?> и, скорее всего, всё заработает. Попробуй, и если не сработает, укажи мне код твоего файла home.php в директории активной темы. Проверь, существует ли этот файл. Если нет, попробуй выяснить, какой шаблон загружается для строки кода, которую я предложил.
Rohit Pande
Теперь контент отображается, но как отдельная страница, что довольно странно - www.completemuscleandfitness.com Вот код шаблона - http://pastebin.com/3xDU9w3R и мой home.php - http://pastebin.com/XELee582
user27348
То же, что и в предыдущем шаге — сделайте резервную копию файла и попробуйте заменить код на этот, а затем проверьте.
Rohit Pande
То же, что и раньше, но метаданные в футере исчезли. Простите за такие сложности...
user27348
У вас проблема со структурой DOM. Я вижу часть футера. Просто проверьте правильность структуры DOM, и, думаю, это решит проблему.
Rohit Pande
Если я ничего не упускаю, мне кажется, что вы все слишком усложняете.
На мой взгляд, виджета "последние записи" должно быть вполне достаточно.
Пример:
Раздел "Последние новости" - это как раз виджет "последние записи".
(Этот сайт еще в разработке - поэтому у меня в поддомене указано "test").