跨插件的WordPress中的自定义挂钩

时间:2010-06-24 15:49:58

标签: php wordpress hook

我正在尝试在一个可以被其他插件使用的Wordpress插件中创建一个钩子。首先,这甚至可能吗?我也发送了一些额外的args,所以这可能是2个问题,因为我一直无法找到关于如何做到这一点的确切信息。

这是我到目前为止所尝试的内容:

在创建钩子的插件中(称之为插件1)我添加了:

do_action('plugin1_hook', $customArg1, $customArg2, $customArg3);

我希望钩子开火。然后,在另一个插件(插件2)中,我添加了:

add_action('plugin1_hook', 'my_function');

function my_function($customArg1, $customArg2, $customArg3) { //my code }

然而,这似乎没有触发该功能。 我对此的反驳是Wordpress钩子comment_post,它由Wordpress定义为:

do_action('comment_post', $comment_ID, $commentdata['comment_approved']);

我正在使用:

add_action('comment_post', 'my_comment'); 
function my_comment($comment_id) { //my code }

以上代码段正常运作。

3 个答案:

答案 0 :(得分:5)

我以为我会把这个作为答案发布,因为它更清楚一点来解释:)

当你挂钩一个函数但没有指定参数个数时,WordPress将总是传回一个参数。

你不会因此而得到错误;

function do_my_hook($arg1, $arg2 = '', $arg3 = '') {}
add_action('my_hook', 'do_my_hook');

但你会这样做的事情;

function do_my_hook($arg1, $arg2, $arg3) {}
add_action('my_hook', 'do_my_hook');

WordPress试图调用do_my_hook(),但它只传回一个参数。第一个示例使用PHP default function arguments,这样您就可以在不传递所有可用参数的情况下调用函数,但没有错误。

第二个例子将触发'missing arguments(s)'PHP错误,因为所有三个参数都是必需的。

修复?

add_action('my_hook', 'do_my_hook', 10, 3);

定义函数所使用的参数数量背后的想法是避免像这样的错误(尽管从技术上讲,使用默认参数很容易避免这些错误!)。

答案 1 :(得分:1)

我的猜测是第二个插件在第一个插件之后加载,因此挂钩在您向其添加操作时已经触发了。您可以尝试使用第一个插件:

function my_custom_hook_insertion($arg1, $arg2, $arg3){
  do_action('plugin1_hook', $arg1, $arg2, $arg3);
}
add_action('plugins_loaded', 'my_custom_hook_insertion');

这将等到所有插件都被加载后才开始挂钩。

答案 2 :(得分:0)

将add_action更改为此可解决问题:

add_action('plugin1_hook', 'my_function', 10, 3);

10代表优先级,3代表函数将采用的args数。我不确定匹配是如何工作的,因为默认值是1,并且我使用大量的钩子而没有指定0 args并且我使用的钩子传递超过1个arg但在我的函数签名中只使用了1个arg。资料来源:WordPress Codex: Function Reference/add action

它正在工作,所以交叉插件钩子是可能的。