Вопрос или проблема
Я добавил шаблон страницы, который является моей новой главной страницей, и я хотел бы просто отобразить последние 5 записей блога. Моя главная страница сейчас выглядит так…
<?php
/**
* Этот файл управляет разметкой вашей главной страницы
*
* @package WordPress
* @subpackage Pytheas WordPress Theme
* Имя шаблона: Пользовательская главная
*/
get_header(); ?>
<?php get_template_part('content','slider'); ?>
<div id="primary" class="content-area span_16 col clr clr-margin">
<div id="content" class="site-content" role="main">
<?php
$wp_query = new WP_Query(
array(
'post_type' => 'post',
'showposts' => of_get_option('home_blog_count','4'),
'no_found_rows' => true,
'ignore_sticky_posts' => true
)
);
if( $wp_query->posts ) { ?>
<div id="home-blog" class="row clr">
<?php
// Отобразить заголовок
if( of_get_option('home_blog_title') ) { ?>
<h2 class="heading">
<span><?php echo of_get_option('home_blog_title'); ?></span>
</h2>
<?php } ?>
<div class="row clr">
<?php
// Начать цикл
$wpex_count=0;
foreach( $wp_query->posts as $post ) : setup_postdata( $post );
$wpex_count++;
$wpex_clr_margin = ( $wpex_count == 1 ) ? 'clr-margin' : NULL; ?>
<div <?php post_class('home-blog-entry span_6 col '. $wpex_clr_margin); ?>>
<?php
//изображение записи
if( has_post_thumbnail() ) { ?>
<a href="https://wordpress.stackexchange.com/questions/106386/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="home-blog-entry-img-link">
<img src="<?php echo aq_resize( wp_get_attachment_url( get_post_thumbnail_id() ), wpex_img('blog_related_entry_width'), wpex_img('blog_related_entry_height'), wpex_img('blog_related_entry_crop') ); ?>" alt="<?php echo the_title(); ?>" class="blog-entry-img" />
</a>
<?php } ?>
<h2><a href="https://wordpress.stackexchange.com/questions/106386/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<div class="home-blog-entry-excerpt">
<?php
// Отобразить отрывок
echo ( !empty( $post->post_excerpt ) ) ?
apply_filters('the_content', get_the_excerpt() ) :
wp_trim_words( strip_shortcodes( get_the_excerpt() ), of_get_option('portfolio_entry_excerpt_length','200') ); ?>
</div><!-- /home-blog-entry-excerpt -->
</div><!-- /home-blog-entry -->
<?php
if( $wpex_count==4) {
echo '<div class="clr"></div>';
$wpex_count=0;
}
endforeach; ?>
</div><!-- /row -->
</div><!-- /home-blog -->
<?php
}
wp_reset_postdata();?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer();?>
Мне непонятно, почему я не могу сделать что-то вроде…
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="entry-conten clr">
<?php the_content(); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-links clr">', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
</div><!-- .entry-content -->
<footer class="entry-footer">
<?php edit_post_link( __( 'Редактировать страницу', 'wpex' ), '<span class="edit-link">', '</span>' ); ?>
</footer><!-- .entry-footer -->
</article><!-- #post -->
<?php comments_template(); ?>
<?php endwhile; ?>
что я вижу на многих других шаблонах. Может кто-то помочь мне понять, как я могу запросить самые последние X записей и отобразить их, используя the_content();
(что, как я думаю, отобразит запись с автором, датой записи и т.д.)
$args = array(
'posts_per_page'=>-1,
'number_posts'=>-1,
'category'=>9,
'orderby'=>'post_date',
'order' => 'DESC',
'post_type'=>'post',
'post_status'=>'publish'
);
$posts = get_posts($args);
foreach($posts as $post):
$id= $post->ID;
$permalink = get_permalink( $id );
$title = $post->post_title;
$content = $post->post_content;
$image = wp_get_attachment_url(get_post_thumbnail_id($id));
endforeach;
Чтобы изменить основной запрос, который извлекает записи, мне нужно было сделать query_posts( 'posts_per_page=5' );
перед has_posts()
.
Ответ или решение
Для отображения последних 5 записей блога на вашей новой главной странице в WordPress необходимо внести определенные изменения в файл шаблона, который вы уже создали. Здесь я объясню шаги, необходимые для решения вашей задачи, а также разберу применение необходимых функций WordPress.
Этап 1: Настройка шаблона
Убедитесь, что ваш файл шаблона корректно настроен. Вы уже начали с создания файла, названного custom-home.php
, и добавили заголовок шаблона в комментариях. Это правильно, так как WordPress будет использовать этот файл для отрисовки главной страницы при выборе соответствующего шаблона в админке.
Этап 2: Получение последних записей
Вы используете WP_Query
для получения записей, что является правильным подходом для такой задачи. Чтобы изменить количество записей, верните в запрос число 5, изменив строку 'showposts' => of_get_option('home_blog_count','4')
на 'posts_per_page' => 5
.
Вот обновленный код:
$wp_query = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => 5, // Получаем 5 записей
'ignore_sticky_posts' => true
)
);
Этап 3: Визуализация записей
В вашем шаблоне вы правильно уже используете цикл для отображения постов:
if( $wp_query->have_posts() ) {
while( $wp_query->have_posts() ) {
$wp_query->the_post(); // Устанавливаем текущий пост
// Отображаем необходимые элементы
echo '<h2>' . get_the_title() . '</h2>'; // Заголовок поста
echo '<div>' . get_the_excerpt() . '</div>'; // Отрывок поста
}
}
Этап 4: Использование the_content()
Если вы хотите отобразить полный контент постов, а не только их заголовки или выдержки, сделайте следующее:
- Во время цикла замените
echo '<div>' . get_the_excerpt() . '</div>';
наthe_content();
Это обеспечит отображение полного содержимого вашего поста вместе с метаданными, такими как дата публикации и автор.
Пример кода:
if( $wp_query->have_posts() ) {
while( $wp_query->have_posts() ) {
$wp_query->the_post(); // Устанавливаем текущий пост
echo '<article id="post-' . get_the_ID() . '" ' . post_class() . '>';
echo '<h2>' . get_the_title() . '</h2>'; // Заголовок поста
the_content(); // Полный контент поста
echo '</article>';
}
}
Этап 5: Восстановление состояния постов
После окончания цикла использования WP_Query
, важно восстановить состояние основного объекта постов. Это можно сделать с помощью функции wp_reset_postdata()
, которая сбросит глобальные переменные, связанные с запросом.
Вывод
С учетом вышесказанного, вот полный код для отображения последних 5 постов на вашей главной странице с использованием the_content()
и других прототипов WordPress:
<?php get_header(); ?>
<?php get_template_part('content','slider'); ?>
<div id="primary" class="content-area span_16 col clr clr-margin">
<div id="content" class="site-content" role="main">
<?php
$wp_query = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => 5,
'ignore_sticky_posts' => true
)
);
if( $wp_query->have_posts() ) {
while( $wp_query->have_posts() ) {
$wp_query->the_post();
echo '<article id="post-' . get_the_ID() . '" ' . post_class() . '>';
echo '<h2>' . get_the_title() . '</h2>';
the_content(); // Отображение полного контента
echo '</article>';
}
wp_reset_postdata(); //