我正在尝试在我的网站顶部获得最新的Wordpress帖子,在这篇文章下面,我正在尝试显示所选页面的内容。例如如果用户在“Home”上,则在顶部应该显示最新的帖子,在下面它应该显示“Home”的内容。要获取最新帖子,我正在使用wp_get_recent_posts()
并显示我正在使用的页面内容the_content()
。
这是我最新帖子的代码:
<div id="news">
<?php
$posts = wp_get_recent_posts(array('numberposts' => 1, 'post_type' => 'post'));
foreach($posts as $post){
echo '<p>' . $post["post_content"] . '</p>';
}
?>
</div>
要显示我正在使用此代码的页面内容:
<h2><?php the_title(); ?> </h2>
<div id="postcontent">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php endif; ?>
</div>
我的问题是:它不显示页面内容。如果我评论“新闻”部分,它会显示页面内容。似乎那些代码部分不能同时工作。我的代码中是否有其他选择或有什么问题?
答案 0 :(得分:1)
wp_get_recent_posts()
就像get_posts
和get_pages
一样只返回WP_Query
的自定义实例中的帖子对象,而不是完整的查询对象。这意味着,您不能使用WP_Query
返回的默认查询对象来运行正常循环,因此默认情况下不使用前三个函数中的任何一个设置postdata。
设置postdata非常重要,因为这样可以使用模板标签。正如您所知或不知道的那样,设置postdata需要设置$post
全局(注意:任何其他变量都不起作用),因此我们将使用它。 (注意:不要将$posts
全局变量用作变量,而是打破全局)
$args = [
// Some arguments
];
$posts_array = wp_get_recent_posts( $args );
foreach ( $posts_array as $post ) {
setup_postdata( $post ); // This is the important line, and you have to use $post
the_content();
}
wp_reset_postdata(); // Very important, restores the $post global
答案 1 :(得分:0)
执行此操作时:
foreach($posts as $post)
您正在覆盖全局$post
对象。
在循环后立即使用wp_reset_postdata()
,以便将$post
对象重置为主查询之一。