由于模板(和布局)的设置,我需要能够在4个不同的分区中放置4个不同的帖子。
例如,我的结构如下
<div>Post 1</div>
<div>
<div>Post 2</div>
<div>
<div>Post 3</div>
<div>Post 4</div>
</div>
</div>
但我在工作上遇到了一些麻烦,我用
get_posts
获取4篇最新帖子。
$posts = get_posts(array(
\'post_type\' => \'post\',
\'post_count\' => 4
));
然后我尝试显示我的帖子
<?php setup_postdata($posts[0]); ?>
<?php get_template_part( \'template-parts/post-thumbnail\' ); ?>
<?php wp_reset_postdata(); ?>
在中
template-parts/post-thumbnail.php
我试图显示标题和永久链接,但它总是显示当前页面的标题和链接。从来没有真正的职位。
最合适的回答,由SO网友:Jacob Peattie 整理而成
您的问题是变量传递给setup_postdata()
必须是全局的$post
变量,如下所示:
// Reference global $post variable.
global $post;
// Get posts.
$posts = get_posts(array(
\'post_type\' => \'post\',
\'post_count\' => 4
));
// Set global post variable to first post.
$post = $posts[0];
// Setup post data.
setup_postdata( $post );
// Output template part.
get_template_part( \'template-parts/post-thumbnail\' );
// Reset post data.
wp_reset_postdata();
现在正常的模板函数,如
the_post_thumbnail()
模板内的部分将引用正确的帖子。
SO网友:Tim Elsass
$帖子在帖子缩略图上下文中不可用。如果使用phpget_template_part(), 因此,它将使用为当前页面找到的帖子ID。您应该使用locate_template() 要使变量可用,get\\u template\\u part在内部使用该变量,如下所示:
<?php $posts = get_posts( array( \'post_type\' => \'post\', \'post_count\' => 4 ) ); ?>
<?php foreach ( $posts as $post ) : setup_postdata( $post ); ?>
<?php locate_template( \'page-templates/post-thumbnail.php\', true, false ); ?>
<?php endforeach; wp_reset_postdata(); ?>
然后,您就可以在页面模板/帖子缩略图中拥有任何内容。包含正确post数据的php模板:
<div>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
SO网友:Johansson
除了处理全局变量之外,您还可以编写一个自定义循环,完全不需要额外的工作就可以使模板部分正常工作。例如:
$args = array(
\'post_type\' => \'post\',
\'posts_per_page\' => 4
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()){
while ($my_query->have_posts()){
$my_query->the_post(); // This is where the post\'s data is set up
get_template_part( \'template-parts/post-thumbnail\' );
}
}
完成。您不需要为循环中的每个帖子设置帖子数据。
顺便说一句get_posts()
本身使用WP_Query()
获取帖子,但区别在于它不会为您设置帖子的数据,需要在循环后重置。