我在读这篇帖子:When should you use WP_Query vs query_posts() vs get_posts()?, 这似乎已经成为理解定制循环的不同函数之间的差异的必经之路。
在这篇文章中,它说
[get\\u posts]不修改全局变量,可在任何地方安全使用
尽管如此,当我插入到另一个循环中时(我希望有一个显示3列的主页,2个显示自定义字段,一个显示最新的博客帖子),我必须保留原来的$帖子,如下所示:
<?php global $post; // required
$tmp_post = $post; // save original post
args = array(\'numberposts\' => 2); // Retrieve just 2 posts
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
?>
//My posts code here (removed to simplify)
<?php
endforeach;
$post = $tmp_post; //go back to original post
?>
在保存原始帖子之前,我的第三列(带有自定义字段)是空的,但在重置后,如上所述,它工作正常。
我是否误解了帖子中那句话的意思?我是不是做了我不该做的事?
最合适的回答,由SO网友:Mridul Aggarwal 整理而成
get_posts
不修改全局变量(&M);可在任何地方安全使用,但setup_postdata
修改全局变量。
使用该功能wp_reset_postdata()
就在foreach循环之后。它反转由所做的更改setup_postdata
. 它所做的事情与您在示例中所做的基本相同,您不需要担心临时变量。