@toscho对这个答案发表了评论,这让我再次思考。我们应该在全球范围内获得多少信任,特别是对于像post globals这样的人$post
?
所以呢?全局变量可以在检查运行之前被所有人覆盖。这就是全局变量的意义:全局访问。
$post
例如,可以肯定是全局变量之一,该全局变量通常在主题本身内或通过插件进行了修改。但是,它还是给定模板内其他应用程序中最常用的全局设置,例如,用于设置相关帖子。
通过回答(和评论)由使用自定义查询引起的特定问题的多个帖子,实际上可以看出,大多数问题是由于未重置自定义查询引起的(自定义查询会更改主查询设置的全局变量)。
由此可见,这$post
是不可靠的。使用自定义查询的任何编写不当的代码段都可以更改$post
全局,这反过来会破坏某些内容(如相关文章)。
实际上,只有少数WordPress开发人员对核心的内部运作足够了解,并且知道应该避免什么,不应该避免什么。越来越多的用户不知道WordPress核心如何运行。
他们只是下载主题并安装插件即可完成所需的工作,甚至只是从教程中复制代码即可。假设他们安装了一个写得不好的插件,该插件会在单个帖子上打断相关帖子,那么他们怎么知道是什么原因造成的?他们将能够自己解决问题,还是他们是第一百个人就此问题写信给主题作者或在该网站上发布问题?
我的问题:当全局变量$post
如此不可靠时,如何防止其他导入的代码引起的此类问题?我们是否应该使用全局性的$post
?有哪些选择?
在总结之前,请在这里分享我的想法:我已经考虑过(或者在某些主题和插件中也看到过)使用wp_reset_postdata()
或使用wp_reset_query()
之前的情况$post
,以确保将全局设置重置为主查询的$post
。但是为什么我应该在主题中添加代码,因为其他人没有正确地为其插件编写代码?而且,如果有人确实重置了自定义查询,则该操作将不必要地第二次运行,这是不好的。
我想到的第二种方法是先使用,$wp_query
然后再使用其方法,例如$wp_query->post
。
任何对此的想法将不胜感激。