将参数传递给Add_action时缺少参数2

时间:2014-05-15 作者:Sandrine

我想将参数传递给由add\\u操作挂钩触发的函数。我跟着codex on this.我得到一个警告,结果很不稳定,出现了意想不到的行为。

这个问题已经解决了before 没有答案。

我可以用一个简单的函数来重现这个问题,该函数响应它需要的两个参数。所以,在functions.php:

function my_function ($arg1, $arg2) {
    echo \'id1: \'.$id1.\' id2: \'.$id2;
    return;
}
add_action(\'this_hook\', \'my_function\', 10, 2);
2表示my_function 为了在执行时能够考虑一些上下文。

因此,待执行do_action 必须添加到模板页面文件中,例如header.php 就像我的情况一样。

 do_action(\'this_hook\', \'dogs\', \'cats\');
结果是回声

id1:id2:id1:dogs id2:cats缺少my\\u函数()的参数2

预期的行为是:

id1:狗id2:猫

2 个回复
SO网友:Sandrine

当挂接任何已由先例触发的挂接时,都会遇到此问题do_action (即何时this_hook 已经在do_action 在wordpress的核心文件或任何插件文件中)

在这种情况下,在add_action(\'this_hook\',\'function\', $priority, $nb_arguments) 可能会产生尽可能多的后果,发出这个警告,以及其他副作用,如重复提到的。

让我们来解释一下this_hook 已触发两次,如下所示:

核心或插件文件中:do_action( \'this_hook\' );do_action( \'this_hook\', \'dogs\', \'cats\');因此,如果在将参数传递给add_action, 您应该验证它是否在代码中的其他位置使用(使用不同数量的参数)。当然,由于您不想修改核心o插件文件来添加表示缺少的两个参数,一种解决方案是触发add_action 在模板中的另一个本地化挂钩上。

让我们假设文件头中还有其他本地化的挂钩。php,比如do_action( \'before_header\') 还有一个do_action(\'after_header\')

然后在functions.php:

function trigger_function () {
    add_action( \'this_hook\', \'my_function\', 10, 2);
}
add_action( \'before_header\', \'trigger_function\');

function remove_function () {
    remove_action( \'this_hook\', \'my_function\');
}
add_action( \'after_header\', \'remove_function\');
在中header.php, 你应该有这样的东西:

do_action(\'before_header\');
....
do_action(\'this_hook\', \'dogs\', \'cats\');
....
do_action(\'after_header\');

SO网友:TheDeadMedic

从您的Gist 你可以这样注册你的钩子:

add_action( \'bp_setup_nav\', \'add_bp_custom_submenu\', 10, 2 );
。。。但您尝试按函数名启动它:

do_action( \'add_bp_custom_submenu\', 213, \'dashboard\' );
。。。当你应该用钩子射击时,名字:

do_action( \'bp_setup_nav\', 213, \'dashboard\' );

结束

相关推荐

Too many actions/filters!

这里是wordpress的新成员。动作/过滤器的概念本身并不难理解。令我不知所措的是大量可用的操作和过滤器。当我阅读教程/指南时,他们会说“只需将此功能添加到wp\\U head操作或after\\U setup\\u主题”。如果没有这些教程,我究竟如何知道将该函数与该操作挂钩?作为一个初学者,我怎么会知道什么是合适的操作?有没有关于如何导航的建议?谢谢