你的代码在哪里?在函数中?模板中的某个地方?
setup_postdata
不替换全局$post
使用$post
传入的对象。然而,它确实修改了其他一些全局变量。
所以如果你想使用the_*
模板标记,需要显式替换全局$post
它们所依赖的对象。
例如,在函数中。。。
<?php
function wpse73103_loop_example()
{
global $post; // this is important!
$posts = new WP_Query(/* your args here */);
// because $post is global above, this will
// overwrite the global object.
foreach($posts as $post)
{
setup_postdata($post);
// do stuff
}
wp_reset_postdata(); // back to normal
}
无论如何,这个故事的寓意是你应该试着
global $post;
在您发布的任何代码之前(这非常正确)。