如何弃用插件中使用的钩子?

时间:2019-07-02 作者:Rohit Patil

我错误地添加了一个钩子,现在我想删除它。我已经添加了一个新的动作挂钩,但为了向后兼容,我需要弃用这个挂钩。

有没有实现这一目标的想法?

1 个回复
SO网友:Jacob Peattie

首先,你需要把钩子放在那里。弃用只是向开发人员发出信号,他们不应该使用它,并且它将在将来被删除。所以你现在还在坚持。

因此,真正的弃用是一个通信问题,而不是真正的代码问题。WordPress在这种情况下提供的一个有用的功能是do_action_deprecated(). 这与do_action(), 除非开发人员WP_DEBUG 启用后,他们将看到一条警告,告诉他们挂钩已被弃用。因此,在代码中要做的事情是替换do_action() 具有do_action_deprecated() (或apply_filters() 具有apply_filters_deprecated() 如果是过滤器)。

除此之外,您应该更新插件的开发人员文档,让开发人员知道挂钩已经被弃用,并给他们一个合理的删除时间。您还应该在包含否决的版本的更改日志中记录否决。

当或者如果是移除挂钩的时候,只需完全移除该行,并在文档和更改日志中通知开发人员该移除。

这就是说,如果唯一改变的是钩子的名称,那么您可以重命名钩子,然后自己钩住钩子并启动旧钩子:

function wpse_342000_old_hook( $arg1, $arg2 ) {
    do_action( \'old_hook_name\', $arg1, $arg2 );
}
add_action( \'new_hook_name\', \'wpse_342000_old_hook\', 0, 2 );
但如果您不想保留这些代码,那么您仍然应该反对原始操作:

function wpse_342000_old_hook( $arg1, $arg2 ) {
    do_action_deprecated( \'old_hook_name\', [ $arg1, $arg2 ], \'1.2.3\', \'new_hook_name\' );
}
add_action( \'new_hook_name\', \'wpse_342000_old_hook\', 0, 2 );
这样,您就可以删除对old_hook_name 并将此代码移动到专用deprecated.php 挡道的文件。只需更换1.2.3 不推荐使用挂钩的插件的版本号。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。