问题描述
我想知道是否是根据 WordPress 主题或插件开发的一个很好的做法。
add_action('init','all_my_hooks');
function all_my_hooks(){
// some initialization stuff here and then
add_action('admin_init',-----);
add_action('admin_menu',----);
// more like so
}
谢谢
最佳解决方案
一般来说:是的,等待专用的钩子来启动你自己的代码。 Never 只是将对象实例引入全局命名空间。但是 init
很少需要。
你尽可能迟到。如果您的第一个代码运行在 wp_head
上,则不要使用较早的钩子。你甚至可以 cascade hooks:
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()
被调用后运行。这样您就可以避免在 multi-site 安装中的无效子站点上运行插件。一切都是一样的
次佳解决方案
我没有看到这种做法的巨大好处,原因如下:
注册时不会调用回调函数
add_action
和 add_filter
功能仅在全局变量 $wp_filter
中添加一个条目,该变量保存所有过滤器和操作。 See source 。它不会调用你的功能。只有当 do_action
和 apply_filters
被调用 (具有适当的挂钩名称) 时,您的代码才会运行,这些钩子应该在那个地方发生得很晚。
你可能会说这样做会使全局变量 $wp_filter
变大=> 需要更多的内存。但是我认为创建一个新功能有同样的问题。
组织代码
将所有内容都放在一个功能中,强制您记住主题/插件中每个文件中的所有钩子。你不会这样做:
-
在
header.php
:添加钩子和回调函数的事情发生在标题 (如菜单,注册脚本) -
在
content.php
中:添加用于过滤内容的钩子和回调函数 -
admin-menu.php
:添加钩子和回调函数来添加管理菜单
(假设那些文件放在你的主题/插件中)
而不是这样,你必须:
-
在
header.php
,content.php
,admin-menu.php
中只放置回调函数 -
并将所有钩子分离在另一个文件中
=> 这将使您很难知道当您查看 header.php
文件的内容时会发生什么。您必须搜索以知道这些回调何时触发。
并在您的主题/插件中有多个课程时思考情况。你把所有班级的钩子放在一个地方吗?还是每个类都有一个包含所有钩子的包装函数?太多了!
以上这些原因,我认为这是个人风格:) 。我看到一些框架,如混合,你说的话。有时候这让我很难在这些框架中挖掘!
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。