当与“SETUP_POSTATA”一起使用时,“GET_POSTS”和“wp_GET_RENECT_POSTS”有什么不同?

时间:2013-08-20 作者:Chris Kempen

这可能是一个完全“我对WP还是新手”类型的问题,但在使用get_posts()wp_get_recent_posts() 在我编写的自定义函数中setup_postdata(). 这是我的函数中的内容。php文件:

<?php
function getRecentPosts($total_posts = 2)
{
    $total_posts = intval($total_posts);
    global $post;

    $args = array(
        \'posts_per_page\' => $total_posts,
        \'post_type\'      => \'post\',
        \'post_status\'    => \'publish\'
    );
    $posts = get_posts($args);

    foreach ($posts as $post)
    {
        setup_postdata($post);
        echo \'<div>\';
            the_title();
        echo \'</div>\';
    }
    wp_reset_postdata();
}
很简单,对吧?这个功能非常有效,去掉了标题的内部div 标签完美无瑕。但当我将第7-12行替换为以下内容时:

    ...
    $args = array(
        \'posts_per_page\' => $total_posts,
        //\'post_type\'    => \'post\',
        \'post_status\'    => \'publish\'
    );
    $posts = wp_get_recent_posts($args);
    ...
。。。然后,该函数似乎无法正确地“迭代”帖子,反复抛出它找到的第一篇帖子的标题,就像不使用global $post 在函数的开头。

为什么会这样?有什么不同的地方wp_get_recent_posts() 我还不明白。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

如果你看看source 属于setup_postdata() 你会发现它需要一个对象($post), 要传递,而不是数组。

wp_get_recent_posts() (source), 默认情况下(对于3.1之前的向后兼容性),将每个帖子作为数组返回。第二个可选参数,可以传递给wp_get_recent_posts() 可以防止这种情况:

$posts = wp_get_recent_posts( $args, OBJECT_K )

(尽管任何值ARRAY_A 在第二个参数中)。

结束

相关推荐