三分钟热度教程:WordPress插件开发之删除不必要的钩子

11月/24日/WordPress/浏览 108

因为,我只能保持三分钟热度,所以,知识点一定要在三分钟之内讲完……


所谓艺高人胆大!在学习了一些开发WordPress插件的知识后,我们膨胀了、决定玩点不一样的!


关于WordPress的钩子-Action和Filter,堪称 WordPress 中的魔法,可以做很多有意思的事儿。之前我们聊了很多,估计朋友们也发现了,聊得都是如何增加钩子,还没说过如何删除钩子。


要从钩子中删除回调函数,需要调用remove_action 或 remove_filter ,这取决于回调函数是作为action还是filter添加的。


传递给remove_action / remove_filter 的参数必须与传递给注册它的 add_action / add_filter 一模一样,否则是不会起作用的。


另外,注意顺序!必须先添加后删除才有效。删除时,钩子还不存在;之后,再添加上,就是白忙活了!


顺序问题,在 WordPress 中经常会遇到,还是因为WordPress开发者太多了,难免有人胡来…… 不过,经过查看源代码,一般都能解决,无非是调整钩子回调函数优先级,或者调换钩子……


如何嫌 remove_action / remove_filter 太麻烦,还有更厉害的:remove_all_actions / remove_all_filters 。威力巨大,感兴趣的朋友可以试试,看看没有钩子的WordPress是什么样的。


下面是一个例子:


// 这里增加了一个钩子
function wporg_setup_slider() {
	// ...
}
add_action( 'template_redirect', 'wporg_setup_slider', 9 );

// 后来,决定去掉上面那个钩子。
function wporg_disable_slider() {
	// 参数要和添加时的一模一样
	remove_action( 'template_redirect', 'wporg_setup_slider', 9 );
}
// 为了确保能成功去掉,所以在 after_setup_theme 钩子中去删除上面那个钩子。
// after_setup_theme 是在functions.php 文件之后才执行的
add_action( 'after_setup_theme', 'wporg_disable_slider' );


实战经验:删别人的钩子,属于高难度操作,一般情况下并不需要(一般情况下都有其他更好的解决办法)。

发表评论

暂无评论,抢个沙发...

客服 工单