Do_action_ref_array()和do_action()之间的区别

时间:2013-03-13 作者:urok93

我很难理解这两个函数。我明白了do_action() 但我不清楚什么时候do_action_ref_array() 会很有用的。我们不能将数组传递给do_action()

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

如果将数组传递给do_action_ref_array(), 该数组的每个元素的值将作为单独的参数传递给回调。钥匙丢了。

  • 如果将数组传递给do_action(), 整个数组将作为单个参数传递给回调。钥匙完好无损。

  • 让我们看看do_action()do_action_ref_array() 在一个简单的插件中:

    add_action( \'wp_footer\',             \'action_diff_test\' );
    add_action( \'diff_action\',           \'diff_test_callback\', 10, 999 );
    add_action( \'diff_action_ref_array\', \'diff_test_callback\', 10, 999 );
    
    /**
     * call test actions
     */
    function action_diff_test()
    {
        $args = array (
            \'foo\'   => \'bar\',
            \'hello\' => \'world\',
            0       => 123
        );
    
        do_action(           \'diff_action\',           $args );
        do_action_ref_array( \'diff_action_ref_array\', $args );
    }
    /**
     * callback for test actions
     */
    function diff_test_callback()
    {
        $args = func_get_args();
        print current_filter() . \', \' . func_num_args() . \' arguments\';
        ?>
        <pre><?php
        print htmlspecialchars(
            print_r( $args, TRUE ),
            ENT_QUOTES,
            \'utf-8\',
            FALSE
        );
        ?></pre>
        <?php
    }
    
    结果:

    diff_action, 1 arguments 
    Array
    (
        [0] => Array
            (
                [foo] => bar
                [hello] => world
                [0] => 123
            )
    
    )
    
    diff_action_ref_array, 3 arguments 
    Array
    (
        [0] => bar
        [1] => world
        [2] => 123
    )
    
    do_action_ref_array()introduced 2006 处理参数的步骤passed by reference PHP 4更好。A.review of the function 2011 已关闭为wontfix。但结论是不再在WordPress中使用新函数,因为在PHP 5中,您可以使用do_action() 也2006年的问题现在已经不是问题了。

    不使用do_action_ref_array() 在自定义挂钩中,但要学习如何阅读它。

    结束

    相关推荐

    Custom Post Row Actions

    我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $