一个重要但经常被忽视的做法是在插件中使用自定义钩子,以便其他开发人员可以扩展和修改它。
自定义钩子的创建和调用方式与WordPress Core钩子相同。
创建钩子
要创建自定义挂钩,对action用do_action,对filter用apply_filters()
注意:我们建议对输出到浏览器的任何文本使用apply_filters()。
这使得插件更容易根据用户的需要进行修改。
命名冲突
当两个开发人员将相同的钩子名称用于完全不同的目的时,就会发生命名冲突。这导致难以找到错误。因此,在钩子名称前面加上唯一的字符串很重要,以避免钩子名称与其他插件发生冲突。
例如,名为email_bodywporg_的过滤器足够通用,以至于两个或多个开发人员可以在不同的插件中将此钩子用于不同的目的。
因此,为了避免这种情况,添加了前缀。
例如,本手册中用作示例的函数用作前缀。当你选择你的前缀时,你可以使用你的公司名称,你的wp句柄,插件名称,任何你喜欢的东西。目标是使其独一无二,因此请明智地选择。
例子
可扩展操作:设置窗体
如果您的插件将设置表单添加到管理面板,您可以使用操作来允许其他插件向其添加自己的设置。
do_action( 'wporg_after_settings_page_html' );
现在另一个插件可以为钩子wporg_after_settings_page_html注册一个回调函数并注入新的设置。
add_action( 'wporg_after_settings_page_html', 'myprefix_add_settings' );
请注意,由于这是一个操作,因此不返回任何值。另请注意,由于未指定优先级,因此它将以默认优先级 10 运行。
可扩展筛选器:自定义帖子类型
在此示例中,注册新的帖子类型时,定义它的参数将通过过滤器传递,因此另一个插件可以在创建帖子类型之前更改它们。
function wporg_create_post_type() {
$post_type_params = [/* ... */];
register_post_type(
'post_type_slug',
apply_filters( 'wporg_post_type_params', $post_type_params )
);
}
现在另一个插件可以为钩子wporg_post_type_params注册一个回调函数并更改帖子类型参数:
function myprefix_change_post_type_params( $post_type_params ) {
$post_type_params['hierarchical'] = true;
return $post_type_params;
}
add_filter( 'wporg_post_type_params', 'myprefix_change_post_type_params' );
请注意,筛选器筛选器获取数据、修改数据并返回数据。因此,名为 myprefix_change_post_type_params( ) 的代码不会使用 echo 或 html 或其他任何内容直接输出到屏幕。另请注意,重新调整的值由register_post_type直接使用,而无需先分配给变量。跳过额外的步骤。
另请注意,由于未指定优先级,因此它将以默认优先级 10 运行。由于预期的参数数量没有值,因此假定默认值为一个。