使数组可按挂钩进行筛选

时间:2017-03-15 作者:Hossam hamed

如何使用do_actionadd_action 返回数组的步骤do_action?

我的示例代码:

function name_fun_one(){
    $namearray[] = array(\'k1\'=> \'text1\', \'k2\' => \'text1\');
    $namearray[] = array(\'k1\'=> \'text2\', \'k2\' => \'text2\');
    do_action(\'add_in_namearray\');
    foreach($namearray as $val)
    {
        //loop 
    }
}

function add_name_fun_one()
{
    $namearray[] = array(\'k1\'=> \'text3\', \'k2\' => \'text3\');
    $namearray[] = array(\'k1\'=> \'text4\', \'k2\' => \'text4\');
}
add_action(\'name_fun_one\', \'add_name_fun_one\');

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

如果要使阵列可过滤,请使用apply_filters()add_filter(). 此外,还必须将数组作为参数传递给apply_filters() 并期望它出现在更改该数组的回调中。

下面是一个基本示例,其中的名称更有意义:

首先,我们有一个运行在颜色名称和值数组上的函数,以便使用样式化的示例打印这些颜色名称和值。它提供了一个挂钩,因此其他代码(主题、插件)可以更改颜色:apply_filters( \'arr_colors\', $colors );.

function print_colors()
{
    $colors = [
        \'red\'   => \'#f00\',
        \'green\' => \'#0f0\',
        \'blue\'  => \'#00f\',
    ];

    $colors = apply_filters( \'arr_colors\', $colors );

    foreach ( $colors as $name => $color ) {
        printf(
            \'%1$s: <span style="background: %2$s;>&nbsp;</span><br>\',
            $name,
            $color
        );
    }
}
现在,我们在其他地方创建一个可以更改颜色的回调函数。注意检查isset ( $colors[\'green\'] ): 可能有多个回调正在侦听该挂钩,因此green 在我们的回调运行之前可能已经被删除。永远记住这一点。

/**
 * @param  array $colors
 * @return array
 */
function change_colors( array $colors )
{
    // remove red
    unset( $colors[\'red\'] );

    // soften the green
    if ( isset ( $colors[\'green\'] ) ) {
        $colors[\'green\'] = \'#5f5\';
    }

    // add fuchsia
    $colors[\'fuchsia\'] = \'#f0f\';

    return $colors;
}
现在,我们在第一个函数中为挂钩注册所述回调:

add_filter( \'arr_colors\', \'change_colors\' );
仅此而已。

SO网友:Faysal Mahamud

你的问题有点难理解。我想你想要这个。

Define the hook:

function sample_hook() {

    $namearray[] = array(\'k1\'=> \'text1\', \'k2\' => \'text1\');
    $namearray[] = array(\'k1\'=> \'text2\', \'k2\' => \'text2\');

    do_action(\'sample_hook\',$namearray);
    //you can add multiple args in do_action hook like do_action(\'sample_hook\',$arg1,$arg2,$arg2); 

}

Attach your function to the hook using add_action:

add_action(\'sample_hook\', \'sample_function\');

function sample_function($namearray) {
    print_r($namearray);
  echo \'Hey, that is amazing.\';
}

Don’t forget to add the following line of code to your page, wherever you want the content to be displayed:

sample_hook();
如果要返回数组,则此代码必须为work。享受

相关推荐

使用Apply_Filters()函数清理和数据验证

我们是否应该清理和验证apply_filters() 像下面的例子?absint( apply_filters( \'slug_excerpt_length\', 35 ) );wp_kses_post( apply_filters( \'slug_excerpt_more\', \'&hellip;\' ) );esc_url( apply_filters( \'slug_login_url\', home_url( \'/\' ) ) );</我在问这个问题,因为我以前从未见过这个问题。