如何传递挂接到单个操作的多个函数的参数?

时间:2017-07-06 作者:David Guilartes

我想为参数设置默认值:

function my_function( $arg = \'foo\' ) {
    echo $arg
}
add_action(\'my_action\', \'my_function\');

function my_2nd_function( $arg = \'bar\' ) {
    echo $arg
}
add_action(\'my_action\', \'my_2nd_function\');
但是当我叫他们做动作的时候

do_action(\'my_action\');
我意识到它没有打印任何东西。我知道我可以设置函数可以接收的参数数量

add_action(\'my_action\', \'my_function\', 10, 1);
并在做动作时传递

do_action(\'my_action\', \'foo\');
但是,当有多个函数连接到该操作上时,我应该怎么做?建议?

1 个回复
SO网友:Dave Romsey

默认输出的值应传递给do_action() 作为第二个参数。E、 g.:

do_action( \'my_action\', \'<p>Default output</p>\' );
请注意,上面的代码实际上不会输出任何内容。它只会启动连接到my_action 钩住它就会过去\'<p>Default output</p>\' 这些功能。

您可以使用附加到my_action 挂钩:

add_action( \'my_action\', \'my_function\', 10, 1 );
function my_function( $default_output ) {
    echo \'<p>foo</p>\';
}

add_action( \'my_action\', \'my_2nd_function\', 10, 1 );
function my_2nd_function( $default_output ) {
    echo \'<p>bar</p>\';
}

add_action( \'my_action\', \'my_3rd_function\', 10, 1 );
function my_3rd_function( $default_output ) {
    echo $default_output;
}

Output:

<p>foo</p>
<p>bar</p>
<p>Default output</p>
在这里使用过滤器可能更有意义。E、 g.:

echo apply_filters( \'my_filter\', \'<p>Default output</p>\' );
输出将由在my_filter 挂钩:

add_action( \'my_filter\', \'my_filter_function_1\', 10, 1 );
function my_filter_function_1( $default_output ) {
    return $default_output;
}

add_action( \'my_filter\', \'my_filter_function_2\', 20, 1 );
function my_filter_function_2( $default_output ) {
    return \'<p>my_filter_function_2() output</p>\';
}

add_action( \'my_filter\', \'my_filter_function_3\', 30, 1 );
function my_filter_function_3( $default_output ) {
    return \'<p>my_filter_function_3() output</p>\';
}

Output:

<p>my_filter_function_3() output</p>
如果没有回调附加到my_filter, 输出为:

<p>Default filter output</p>

结束

相关推荐

自定义发布类型的POST_ROW_ACTIONS

我正在使用this 在WordPress Admin中具有重复post函数的代码。但是,当我为自定义帖子类型添加过滤器时,如下所示:add_filter( \'directory_row_actions\', \'rd_duplicate_post_link\', 10, 2 ); (自定义帖子类型的注册名称为directory) - 它不会将其添加到条目标题下的操作行中。当我为帖子或页面执行此操作时,如下所示:add_filter( \'post_row_actions\', \'rd_dup