我制作了许多WordPress站点,并学习了我认为是正确的PHP实践,即函数在functions.php文件中,functions.php中的几乎所有东西都应该封装在一个函数中,页面模板可以在其中直接使用PHP,等等。
但我对“为什么”有点犹豫。页面模板和函数文件之间的区别是什么改变了每个文件的工作和不工作?我假设这是装货订单,但是如果有更多的更先进的指导或方向,我将不胜感激。
编辑-好吧,我知道它的“最佳实践”方面。函数应该是可重用的,等等。当/为什么它不能工作时,我更多地寻找技术原因。
发布于 2019-04-25 11:33:07
尽管没有官方的回答,但这个问题仍然很受欢迎,所以一年后我会发表我对此的坚定想法。
导致这个问题的原因是代码在某些地方工作的经验,而不是在其他地方。例如,为什么我必须将代码包装在functions.php中的一个函数中,而不是只将它松散地放在那里,而我能够将它保存在一个模板文件中呢?WordPress在不同的地方对待代码的方式似乎有一些根本的区别。
但当然,这并不准确。PHP是PHP,而WordPress只是在一行一行地愉快地前进。
正如我在最初的问题中所写的,正如Krzysiek和其他人所肯定的,主要的区别是装载顺序。但是,WordPress中的加载顺序是一切。
相对来说,主题的functions.php很早就被加载了。目前还处于筹备阶段。WordPress的关键功能已经就绪,如add_action()、插件和全局功能。但你还没准备好开始做事。页面输出还没有被写入,主循环没有运行,等等。
因此,如果您在functions.php中放了一行松散的代码来做“现在”的事情,那可能还为时过早。相反,这里松散的代码行应该是预备性的,即“稍后再做”或“后面有一个常量”,或者,如文件名所示,“这里有一个稍后运行的函数。”
另一方面,模板文件运行相对较晚。WordPress在加载过程中已经有了足够的信息来为用户的请求选择正确的模板文件。在这里,几乎任何松散的代码都是有意义的,因为我们即将结束循环。其他的都设置好了,我们已经在建立我们的输出了。
考虑到这一切,事情开始成为焦点。为什么functions.php中的语法错误会导致白屏幕死亡,而模板文件中的语法错误只会在中途突破页面呢?因为functions.php在任何输出之前运行,所以错误会在需要显示的东西之前中断,但是模板文件可能在输出的一半。
因此,它确实可以归结为顺序,但以一种比我最初想象的更深刻的方式。
附注:在过去的一年里,帮助我更好地理解这一点的是:(a)更好地理解从使用xDebug的加载序列中获得的加载顺序,从字面上观察事情是如何发展的;(b)对钩子有更深入的理解。由于加载顺序在WordPress中非常重要,所以钩子系统是非常关键的。这就像时间旅行为你的代码。
https://wordpress.stackexchange.com/questions/308372
复制相似问题