目录
WordPress 的钩子系统(Hooks)是其可扩展性和灵活性的核心。我们日常使用的 add_action()
、add_filter()
让我们可以方便地“钩入”WordPress 核心流程中,但有时候,我们也希望其他开发者能够“钩入”我们自己的插件或主题逻辑中。
这就需要我们自定义钩子。本篇文章将带你系统了解如何在 WordPress 主题和插件中自定义 动作钩子(Action Hook) 和 过滤钩子(Filter Hook),并提供最佳实践建议。
WordPress 支持两种钩子:
你常见的 do_action()
和 apply_filters()
就是 WordPress 核心用于“触发”钩子的函数,而 add_action()
和 add_filter()
是开发者“注册回调”的函数。
假设你开发了一个功能强大的插件或模块,别人想在其中某个步骤执行自己的逻辑,又不想修改你的源代码。你就可以预留一个动作钩子,让他 add_action()
挂进去。
自定义钩子=可插拔架构的基础。
动作钩子是通过 do_action()
声明的:
do_action('my_plugin_after_process', $user_id, $data);
这句代码的意思是:“此处触发一个名为 my_plugin_after_process
的动作钩子”,其他人就可以这样注册回调:
add_action('my_plugin_after_process', 'do_something_after', 10, 2);
function do_something_after($user_id, $data) {
// 你自己的扩展逻辑
}
✅ 使用场景举例
// 插件中处理表单后
function handle_form_submit($data) {
// 插件自己的处理逻辑...
// 通知其他开发者:我处理完了
do_action('my_plugin_form_submitted', $data);
}
过滤钩子用于让外部代码修改某个值,通过 apply_filters()
声明:
$title = apply_filters('my_theme_custom_title', $title);
外部开发者可以这样修改你的值:
add_filter('my_theme_custom_title', 'change_custom_title');
function change_custom_title($title) {
return '🔥 ' . $title;
}
✅ 使用场景举例
// 主题中显示标题前做个过滤
function display_title($title) {
$title = apply_filters('my_theme_before_display_title', $title);
echo esc_html($title);
}
为了避免冲突,钩子命名建议带前缀:
yourplugin_动作描述
yourtheme_模块动作
例如:
do_action('myshop_order_created', $order_id);
可以用日志工具查看回调是否生效:
add_action('my_hook', function() {
error_log('my_hook fired!');
});
也可以用 WP 插件如 Query Monitor 观察当前页面哪些钩子被触发了。
自定义钩子是构建灵活插件和可拓展主题的关键。掌握 do_action()
和 apply_filters()
的用法,不仅能让你写出更强大的模块,也能让你的代码更开放、更具生态价值。
下次开发插件时,不妨问问自己一句:“这里我是否可以放一个钩子,让别人也能扩展?”
WordPress日记主要承接WordPress主题定制开发、PSD转WordPress、WordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494 微信:18539976310
上一篇:已是最新文章
还没有任何评论,你来说两句吧