使用wordpress同时使用wp_get_recent_posts()和the_content()

时间:2015-07-20 09:50:59

标签: php wordpress

我正在尝试在我的网站顶部获得最新的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>

我的问题是:它不显示页面内容。如果我评论“新闻”部分,它会显示页面内容。似乎那些代码部分不能同时工作。我的代码中是否有其他选择或有什么问题?

2 个答案:

答案 0 :(得分:1)

wp_get_recent_posts()就像get_postsget_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对象重置为主查询之一。