何时使用全局$POST和其他全局变量?

时间:2014-12-05 作者:akmur

我试图理解何时以及为什么应该使用全局$post变量。我曾尝试在一个帖子页面上,在循环之外执行以下操作,正如预期的那样,它可以正常工作。

    <?php 
        global $post;
        echo $post->ID;
    ?>
如果我在存档页面上也这样做(只是想看看会发生什么),出于某种原因,它也可以工作,检索上一篇文章的ID,即使我从上一篇文章页面中删除了上面的代码。这是一种缓存吗?这到底是怎么回事?

我理解,如果我正在处理函数中的函数,那么global$post可能会很有用。php。这是唯一的用例吗?

非常感谢

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

这也许是一个太宽泛的问题,无法很好地回答。这个$post global可以以各种方式使用。是否应使用取决于每种情况。

然而,据我所知main intended purpose$post 全局是它在主题模板文件中的使用。

当您使用the_title()the_content()the_author() WordPress可以在$post 全球的通常,在处理模板文件时,您总是希望使用这些模板函数,如get_the_ID(), 而不是访问$post->ID 直接地

所以如果你想了解$post global better,你应该了解如何The Loop 在WordPress中工作,尤其是在模板文件中。循环运行时the_post(), 它正在使用当前项目设置全局。

在模板文件中,通常会对自动运行的查询循环进行迭代。例如,当您访问单个页面时,WordPress知道要对该页面运行查询并加载page.php 样板

如果要检索主循环之外的额外帖子,例如functions.php, 你可以自己经营WP_Query, 启动循环,然后使用模板函数。仅访问$post 如果您无法通过现有功能访问所需信息,请直接全局访问。

当你完成了自己的循环WP_Query, 你会发现$post global现在卡在自定义查询上。因此,例如,在我们的单页模板上,在自定义循环之后,我们可能不再在中设置当前页$post. 您可以还原$post 全球至其前状态wp_reset_query. 这是absolutely critical 或者你可以破坏其他插件或主题$post 全球的

SO网友:Pieter Goosen

我写了一两篇关于这个问题的帖子,在这个问题涉及其他一些问题时,可能缺少一些信息。我还问了一个问题,你可以查一下here 来自@G.M.的回答很好。

基本上$post 全局由设置$wp_query->the_post() 并且可以在整个模板中访问,而不仅仅是在循环中。这就是为什么他们被称为全球人

这是current source

3681        public function the_post() {
3682                global $post;
3683                $this->in_the_loop = true;
3684
3685                if ( $this->current_post == -1 ) // loop has just started
3686                        /**
3687                         * Fires once the loop is started.
3688                         *
3689                         * @since 2.0.0
3690                         *
3691                         * @param WP_Query &$this The WP_Query instance (passed by reference).
3692                         */
3693                        do_action_ref_array( \'loop_start\', array( &$this ) );
3694
3695                $post = $this->next_post();
3696                setup_postdata($post);
3697        }
3698
从这里你也可以得到你的问题的答案,为什么你得到最后一篇文章作为$post 在存档页面(以及就此而言的任何页面)中。$post 始终有效地设置为返回中的最后一个帖子$posts 阵列通过$wp_query->next_post()

你必须非常小心地使用这个全球outside 作为自定义查询的循环和一些函数可以访问它并更改其值,如链接帖子中所述。这就是为什么您应该始终从的新实例重置postdata的原因之一WP_Query. query_posts 当它中断主查询时,也会中断此全局查询,原因之一是query_posts 应不惜一切代价避免

基本上只需要定义全局$post 在当前模板之外的函数中,但如果愿意,可以在循环之外定义全局。

最后,作为$post global是最不可靠的global之一,很容易被函数修改,我建议在链接问题中使用@G.M.的建议

结束

相关推荐

Passing variables to new page

我试图将变量传递到新页面,我在主题中创建了一个函数来获得结果。现在当我使用yelplist(); 在我的主题首页上,它会得到结果,当我点击链接时,它会按要求将图像和城市返回给我。Questions:<然而,我想知道我能做些什么让变量传递到自己的页面。例如:如果我单击该名称,一个新页面将显示该链接的图像和城市结果</也可以在单曲中完成。php文件,还是将是一个全新的页面/文件Update 1*我在使用$\\u会话方面取得了一些进展,现在我可以将变量传递到单个会话中。然而,当我点击这个链接时,它