为什么筛选器/操作需要参数计数?

时间:2013-05-29 作者:Lex R

我只是在看插件。php试图回答上述问题,但我无法解决。调用筛选器的实际代码如下:

do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        if ( !is_null($the_[\'function\']) ){
            $args[1] = $value;
            $value = call_user_func_array($the_[\'function\'], array_slice($args, 1, (int) $the_[\'accepted_args\']));
        }

} while ( next($wp_filter[$tag]) !== false );
如果(int) $the_[\'accepted_args\'] 如果没有,那么它只会将所有可用的内容传递给目标函数without any adverse affects 对于具有较少形式参数的函数。

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

因为向后兼容。

您可以对多个筛选器使用相同的回调。在回调中,您应该使用current_filter() 确定上下文。但是一些插件使用传递的参数的数量来代替。改变这一点会破坏这些插件。

这就是为什么您应该始终使用API(此处:current_filter()) 而不是一些虚构的构造。

此外,当您向本机函数传递的参数超过该函数的预期值时,PHP将发出警告。

请参见Ticket #14671 Deprecate the "accepted args" argument in add_filter() and add_action()

结束

相关推荐

WordPress函数在包含的php文件中出现致命错误

首先,我的问题类似于this thread. 然而,张贴在那里的解决方案对我不起作用。我正在创建一个插件,它使用Shortcode API在页面上显示联系人表单。插件文件夹内容:请联系。php(主插件文件)验证。php(包括php文件)主文件有常用的插件头,其中调用的WordPress函数按预期工作[即:get\\u permalink()]验证。php文件包含在contact中。php如下:define (\"PLUGIN_PATH\", plugin_dir_path(__FILE__));