代码之家  ›  专栏  ›  技术社区  ›  Ryan Elkins

WordPress中跨插件的自定义挂钩

  •  8
  • Ryan Elkins  · 技术社区  · 15 年前

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

    以下是我迄今为止尝试过的:

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

    在我想让钩子开火的时候。然后,在另一个插件(插件2)中,我添加了:

    add_action('plugin1_hook', 'my_function');
    

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

    不过,这似乎并没有启动该功能。 我的参考文献是Wordpress的hook comment\u 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 回复  |  直到 8 年前
        1
  •  5
  •   TheDeadMedic    15 年前

    我想我应该把这个作为一个答案,因为它解释得更清楚一点:)

    当你钩住一个函数,但不指定参数的数目时,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 argument(s)”PHP错误,因为这三个参数都是必需的。

    修复?

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

    定义函数接受多少个参数背后的想法是避免出现这样的错误(尽管从技术上讲,使用默认参数也可以很容易地避免这些错误!)。

        2
  •  1
  •   John P Bloch    15 年前

    我猜第二个插件是在第一个插件之后加载的,所以在您向它添加操作时,钩子已经启动了。您可以在第一个插件中尝试以下操作:

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

        3
  •  0
  •   Ryan Elkins    15 年前

    将我的add\u操作更改为此操作修复了此问题:

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

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

    推荐文章