如何调用do_action()将参数传递给带有不同数量参数的挂钩函数?

时间:2021-11-04 作者:Ryan Yang

这里有一个简单的例子来解释我的问题。3个函数连接到myaction中。每个参数都有不同数量的arg,arg可以是数字数组中的一个数。因此,参数也可以是不同的数据类型。


add_action(\'myaction\', \'my_multiplication\', 20, 3);
add_action(\'myaction\', \'my_addition\', 30, 1);
add_action(\'myaction\', \'my_division\', 50, 2);

function my_addition ($a = array()) {
    $sum = 0;
    echo \'

\'; foreach ($a as $i => $val) { $sum += $val; echo ($i ? \' + \' : \'\') . $val; } echo \' = \' . $sum . \'

\'; } function my_multiplication ($a, $b, $c) { echo \'

\' . $a . \' * \' . $b . \' * \' . $c . \' = \' . ($a * $b * $c) . \'

\'; } function my_division ($a, $b) { echo \'

\' . $a . \' / \' . $b . \' = \' . ($a / $b) . \'

\'; }
如何调用do\\u action来运行3挂钩函数?这是我尝试的,但没有成功。我想要2,3,4作为乘法,数组(11,22,33)作为加法,60,20作为除法。


do_action(\'myaction\', 2, 3, 4, array(11, 22, 33), 60, 20);
Update我想知道传递参数是否可以更具体,如下所示:


do_action(
    \'myaction\',
    array(
        \'my_multiplication\' => array(2, 3, 4),
        \'my_addition\' => array(array(11, 22, 33)),
        \'my_division\' => array(60, 20)
    )
);

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

传递给的所有其他参数do_action() 作为参数按顺序传递给任何挂钩回调函数。回调函数只能通过设置$accepted_args parameter of add_action(). 他们无法选择要接受的参数。

所以你需要这样做:

add_action(\'myaction\', \'my_multiplication\', 20, 3); // Accept the first 3 arguments.
add_action(\'myaction\', \'my_addition\', 30, 4); // Accept the first 4 arguments.
add_action(\'myaction\', \'my_division\', 50, 6); // Accept the first 6 arguments.


function my_multiplication ($a, $b, $c) {
    echo \'\' . $a . \' * \' . $b . \' * \' . $c . \' = \' . ($a * $b * $c) . \'\';
}

function my_addition ($a, $b, $c, $d = array()) {
    $sum = 0;
    echo \'\';
    foreach ($d as $i => $val) {
        $sum += $val;
        echo ($i ? \' + \' : \'\') . $val; 
    }
    echo \' = \' . $sum . \'\';
}

function my_division ($a, $b, $c, $d = array(), $e, $f) {
    echo \'\' . $e . \' / \' . $f . \' = \' . ($e / $f) . \'\';
}
注意如何my_addition() 需要接受至少4个参数才能访问$d, 其中包含数组my_division() 需要接受所有6个参数才能获取$e$f, 最后两个数字。

相关推荐

Gutenberg通过wp.hooks.addFilter修改核心分类面板元素

我已经研究过修改现有的编辑器元素……但几乎没有。但我确实在Github得到了一个很好的回复,指出了这一点:https://github.com/WordPress/gutenberg/tree/master/packages/editor/src/components/post-taxonomies#custom-taxonomy-selector显然,分类小组可以通过wp.hooks.addFilter. 这是一个很好的开始!我已经能够使用该代码片段模拟一些虚拟代码,用Dashicon替换分类法面板。(