自定义挂钩

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

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

创建一个钩子

要创建自定义挂钩,请将do_action() 用于Actions并使用apply_filters() 用于Filters。

笔记:
我们推荐使用apply_filters() 对输出到浏览器的任何文本。特别是在前端。

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

向挂钩添加回调

要将回调函数添加到自定义挂钩,请使用add_action() 用于Actions和add_filter() 用于Filters。

命名冲突

由于任何插件都可以创建自定义挂钩,因此为您的挂钩名称添加前缀以避免与其他插件发生冲突很重要。

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

命名该函数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' );

外部资源

  • Michael Fields 的可扩展扩展
  • Brandon Dove 的可插拔插件
  • WordPress 插件烦恼 #3: Will Norris无法扩展