Answers:
通常:是,请等待专用的挂钩启动您自己的代码。永远不要将对象实例扔到全局名称空间中。但是init
几乎没有必要。
您要尽可能早点上钩。如果您的第一个代码在运行,wp_head
请不要使用较早的钩子。您甚至可以层叠钩子:
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
关于init
挂钩:请wp_loaded
改用。那init
在ms_site_check()
被调用之后 运行。这样,您可以避免在多站点安装的无效子站点上运行插件。其他一切都一样。
由于以下原因,我没有看到这种做法的巨大好处:
该add_action
和add_filter
功能仅添加到全局变量的条目$wp_filter
它包含所有过滤器和动作。参见来源。它不会调用您的函数。您的代码仅在调用do_action
和时apply_filters
(具有适当的钩子名称)才运行,这在这些钩子应放置的位置发生得很晚。
您可能会说,这样做会使全局变量$wp_filter
变大=>需要更多的内存。但是我认为创建一个新功能存在相同的问题。
将所有内容放在一个函数中会迫使您记住主题/插件中每个文件的所有挂钩。您不会做这样的事情:
header.php
:添加钩子和回调函数,以处理标题中发生的事情(例如菜单,注册脚本)content.php
:添加挂钩和回调函数以过滤内容admin-menu.php
:添加挂钩和回调函数以添加管理菜单(假设这些文件放在主题/插件中)
取而代之的是,您必须:
header.php
,content.php
中admin-menu.php
=>这将使您很难知道在查看header.php
文件内容时会发生什么。您必须进行搜索才能知道何时触发这些回调。
考虑一下您的主题/插件中有多个类的情况。您是否将所有类别的所有钩子放在一个地方?还是每个类都有一个包装所有钩子的包装器功能?太多余了!
除了这些原因,我认为这是个人风格:)。我看到像Hybrid这样的一些框架可以实现您所说的。有时,这使我很难挖掘这些框架!
wp_loaded
和MS信息。