首页 / 插件开发手册 / 钩子 Hooks / 自定义钩子

自定义钩子

一个重要但经常被忽视的做法是在插件中使用自定义钩子,以便其他开发人员可以对其进行扩展和修改。

自定义钩子的创建和调用方式与WordPress核心钩子相同。

 

创建钩子

要创建自定义钩子,请使用do_action()表示动作,使用apply_filters()表示过滤器

Note:我们建议在输出到浏览器的任何文本上使用apply_filters()。尤其是在前端

这使得插件更容易根据用户的需要进行修改。

 

向钩子添加回调

要将回调函数添加到自定义钩子,请使用add_action()表示动作,使用add_filter()表示过滤器

 

命名冲突

由于任何插件都可以创建自定义钩子,因此在钩子名称前加前缀以避免与其他插件发生冲突非常重要。

例如,名为email_body的过滤器将不太有用,因为很可能其他开发人员会选择相同的名称。如果用户同时安装这两个插件,可能会导致难以追踪的bug。

命名函数wporg_email_body(其中wporg_是插件的唯一前缀)可以避免任何冲突。

 

示例

 

可扩展动作:设置表单

如果您的插件将设置表单添加到管理面板中,您可以使用动作允许其他插件向其中添加自己的设置。

    Foo: 
    Bar: 
   <?php
    do_action( 'wporg_after_settings_page_html' );
}

现在,另一个插件可以为wporg_after_settings_page_html钩子注册回调函数并注入新设置:

    New 1: 
    <?php
}
add_action( 'wporg_after_settings_page_html', 'myprefix_add_settings' );

 

可扩展过滤器:自定义文章类型

在本例中,当注册新的文章类型时,定义它的参数将通过过滤器传递,因此另一个插件可以在创建文章类型之前更改它们。

<?php
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钩子注册回调函数并更改文章类型参数:

<?php 
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' );

 

外部资源