是否使用wp初始化钩子调用其他钩子?

时间:2012-10-09 作者:atinder

我想知道根据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

}
谢谢

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

一般来说:是的,等待一个专用的钩子来启动您自己的代码。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() 已调用。这样可以避免在多站点安装中在无效的子站点上运行插件。其他一切都一样。

SO网友:Anh Tran

我看不到big 这种做法的好处,原因如下:

注册时不会调用回调函数add_actionadd_filter 函数仅向全局变量添加一个条目$wp_filter 它保存所有筛选器和操作。See source. 它不调用您的函数。当do_actionapply_filters 被调用(使用适当的钩子名称),这种情况很晚才会发生在钩子应该所在的位置。

您可能会说这样做将使全局变量$wp_filter 变大=>需要更多内存。但我认为创建一个新函数也有同样的问题。

组织代码将所有内容放在一个函数中,迫使您记住主题/插件中每个文件中的所有挂钩。你wouldn\'t 执行以下操作:

英寸header.php: 为标题中发生的事情(如菜单、注册脚本)添加挂钩和回调函数content.php: 添加挂钩和回调函数以过滤内容admin-menu.php: 添加挂钩和回调函数以添加管理菜单(假设这些文件放在主题/插件中)

相反,您必须:

仅将回调函数放入header.php, content.php, admin-menu.php

  • 并将所有挂钩放在另一个文件中的一个单独函数中,这将使您很难知道在查看header.php 文件您必须搜索以了解何时触发这些回调。

    考虑一下当您的主题/插件中有多个类时的情况。你把所有种类的钩子放在一个地方吗?还是每个类都有一个保存所有钩子的包装函数?太多余了!

    除此之外,我认为这是个人风格:)。我看到一些像Hybrid这样的框架按照你说的做了。有时候,我很难在这些框架中挖掘!

  • 结束