register_activation_hook vs add_action('init')

时间:2010-03-10 14:19:56

标签: php wordpress wordpress-plugin

我正在尝试确定为什么某些WordPress插件使用register_activation_hook(__FILE__, 'activate_plugin'),而其他人则使用add_action('init', 'activate_plugin');

3 个答案:

答案 0 :(得分:14)

两者做了不同的事情,register_activation_hook用于注册一个函数,该函数在插件被激活时被调用一次(在Wordpress插件管理页面上),而函数被挂钩到{{每次请求都会调用1}}动作。

因此,常见的例子是使用激活函数来创建数据库表,或者为插件设置默认选项,然后使用init动作函数来加载已翻译的字符串。

答案 1 :(得分:2)

有几个原因:

  • register_activation_hook是WP2 +,add_action可以在此之前使用
  • register_activation_hook允许开发人员指定函数所在的文件(虽然这似乎很少使用)
  • 对我而言,register_activation_hook是'清洁'

所以我敢打赌,使用版本2之前的add_action日期的插件或开发人员不知道register_activation_hook

答案 2 :(得分:0)

将“activate_plugin”函数挂钩到init看起来要么是很久以前完成的代码,要么是不知道register_activation_hook的人。第三种可能性是,无论函数名称如何,无论是否调用register_activation_hook,它们都希望它运行。

例如,当更新插件时,插件将被停用并重新激活,但不会调用activate挂钩。 (如果插件是通过FTP或类似的方式更新的话,肯定不会调用它。)因此,如果我输入一些需要在激活或更新后运行的代码,我可能会将它挂钩到init。 / p>