如果没有设置$arg,为什么do_action传递一个空字符串作为第一个参数?

时间:2017-08-01 作者:Adam Christianson

我很难理解如何使用默认参数设置函数,然后使用do_action 在WordPress中。我不确定这是WordPress的问题还是我不理解do_action 方法我定义了这样一个函数:

function contact_info( $show_logo=true ) {

    var_dump( $show_logo );    
}
然后我添加如下挂钩:

add_action( \'show_contact_info\', \'contact_info\' );
最后,当我这样调用do\\u操作时:

do_action(\'show_contact_info\');
我希望var_dump 未来bool(true), 但我得到的是:string(0) ""

所以我的问题是为什么?

它似乎不接受函数中设置的默认值,或者更具体地说,不接受do_action 如果调用中未定义参数,则调用似乎总是将空白作为第一个参数传递。这是Wordpress的标准吗?为什么它不能传递NULL?

1 个回复
SO网友:birgire

当我们启动时:

do_action( \'foo\' );
我们实际上是在打电话:

do_action( \'foo\', \'\' );
那是因为defined; 具有the empty string as the default input argument:

function do_action($tag, $arg = \'\') {
    // ...
}
因此,操作的回调get将空字符串作为第一个输入参数。

至少从WordPress开始就是这样version 1.5.

自WordPress 4.6以来,do_action() 是的包装WP_Hook::do_action();

如果

如果没有参数部分,它的定义如下:

function do_action($tag) {
    // ...
}
并对本部分进行相应修改:

$args = array();
if ( is_array($arg) && 1 == count($arg) && isset($arg[0]) && is_object($arg[0]) ) // array(&$this)
    $args[] =& $arg[0];
else
    $args[] = $arg;
然后,我们可以在回调中使用第一个输入参数的默认值。

结束

相关推荐

Hooks for Links Box

Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。