尽管没有“官方”的答案,但这个问题仍然很受欢迎,因此一年后我将发表我对这个问题的坚定想法。
导致这个问题的是代码在某些地方工作的经验,而不是在其他地方。例如,为什么我必须在函数中的函数中包装代码。php,而不是将其松散地放在那里,而我能够将其松散地保存在模板文件中?感觉WordPress在不同的地方处理代码的方式有一些根本的不同。
当然,这并不准确。PHP就是PHP,WordPress正在一行一行地愉快地前进。
正如我在最初的问题中所写的那样,正如Krzysiek和其他人所确认的那样,主要的区别在于装载顺序。但是WordPress中的加载顺序就是一切。
主题的功能。相对而言,php很早就被加载了。它仍处于准备阶段。WordPress的关键功能已经就绪,如add\\u action(),以及插件和全局函数。但你还没有准备好开始做事。页面输出尚未写入,主循环未运行,等等。
因此,如果您在函数中放置一行松散的代码来“立即”执行某些操作。php,这可能太早了。相反,这里松散的代码行本质上应该是预备性的,即“稍后执行此操作”或“这是稍后使用的常量”,或者,正如文件名称所示,“这里有一个稍后运行的函数”
另一方面,模板文件运行相对较晚。WordPress目前正在加载过程中,它有足够的信息为用户的请求选择正确的模板文件。几乎任何松散的代码在这里都是有意义的,因为我们正接近周期的末尾。其他一切都已准备就绪,我们已经在构建我们的输出。
考虑到所有这些,事情开始成为焦点。为什么函数中出现语法错误。php会导致白屏死机,但模板文件中的语法错误会导致页面中途中断?因为功能。php是在任何输出之前运行的,所以在有任何东西显示之前,错误会破坏一切,但模板文件可能在输出的中途完成。
所以它确实可以归结为顺序,但比我最初想象的要深刻得多。
p、 在过去的一年里,帮助我更好地理解这一点的是:(a)更好地理解了通过使用xDebug逐步完成加载序列而获得的加载顺序,从字面上看事情是如何展开的,以及(b)更深入地理解了挂钩。由于加载顺序在WordPress中非常重要,因此挂钩系统至关重要。这就像是代码的时间旅行。