使用全局变量的缺点是什么?

时间:2013-10-19 作者:Sodbileg Gansukh

我是WordPress的新手。在我的“最近的帖子”快捷代码中,我使用了global $post 变量,因为the_title() 功能是给我页面的标题,而不是帖子的标题。我不太确定,但我认为这是因为循环中的循环。

这里的一些高级用户告诉我不要使用global 变量,因此使用global $post 我的“最近帖子”短代码中的变量是好还是坏?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

这个global 变量$post 将设置为主查询中的第一篇帖子。当任何循环运行时(假设其构造正确),无论是主循环还是任意数量的次循环,$post 将依次设置到该循环中的每个帖子。在循环结束时,它将设置为运行的最后一个循环中的最后一个帖子。功能wp_reset_querywp_rest_postdata 在很多情况下,帮助解决这个问题。

我很确定问题是“循环中的循环”的构造,但你没有发布代码,所以我只能猜测。我猜你有这样的想法:

$recent = get_posts(/*...*/);
foreach ($recent as $r) {
  the_title();
}
您需要:

$recent = new WP_Query(/*...*/);
if ($recent->have_posts()) {
  while($recent->have_posts()) {
    $recent->the_post();
    the_title();
  }
}
wp_reset_postdata();

SO网友:random_user_name

缺点是global $post 可能会给您带来意想不到的结果,除非您确信自己在循环中。

小部件和其他插件可以回放您的帖子,将帖子循环到不同的位置,以及其他可能导致您获得不想要或预期结果的操作。

由于您没有告诉我们您的短代码是在哪里执行的,因此它可能在循环之外,并且可能会产生意外的结果。

如果你的快捷码应该列出最近的帖子,那么它肯定不是正确的应用程序global $post - 你需要调查Writing a Custom Loop 为了得到最近的帖子,不影响主循环。

结束

相关推荐

键($GLOBALS[‘wp_REGISTERED_SIDEDARS’])始终显示相同的值

我使用的代码来自another answeradd_action( \'dynamic_sidebar\', \'wpse_96681_hr\' ); function wpse_96681_hr( $widget ) { static $counter = 0; // right sidebar in Twenty Ten. Adjust to your needs. if ( \'sidebar\' === key(