如果要使阵列可过滤,请使用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;> </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\' );
仅此而已。