WordPress开发函数apply_filters_ref_array()

WordPress开发函数apply_filters_ref_array()

241
2021-03-31 11:41:18

WordPress开发函数apply_filters_ref_array(),调用已添加到筛选器钩子的回调函数,并指定数组中的参数。

用法:

apply_filters_ref_array( string $tag, array $args )

描述:

参见also

apply_filters():这个函数是相同的,但是传递给与$tag挂钩的函数的参数是使用数组提供的。

参数

$tag

(string) (必需) 过滤器钩子的名称。

$args

(array) (必需) 提供给与$tag挂钩的函数的参数。

返回

(mixed)所有钩子函数应用到过滤后的值。

更多信息

当你的参数已经在数组中,或者有很多参数要传递时,这个函数会很有用。只是要确保你的论点是在正确的顺序!

在PHP 5.4之前,回调函数传递一个指向数组的引用指针。你的回调函数可以使用这个指针来访问所有的数组元素。添加一个过滤器并声明一个挂钩上述过滤器示例的回调函数,如下所示:

add_filter('my_filter', 'my_callback');

function my_callback( $args ) {

//access values with $args[0], $args[1] etc.

}

因为数组是通过引用传递的,所以对数组元素的任何更改都应用于函数范围之外的原始数组。

无论PHP版本如何,你都可以在添加过滤器时指定数组元素的数量,并在回调函数声明的单独参数中接收每个元素,如下所示:

add_action('my_filter', 'my_callback', 10, 4 );

function my_callback( $arg1, $arg2, $arg3, $arg4 ) {

//access values with $args1, $args2 etc.

}

因为原始数组是通过引用传递的,所以对数组元素的任何更改都应用于函数范围之外的原始数组。

来源:

文件: wp-includes/plugin.php

function apply_filters_ref_array( $tag, $args ) {

global $wp_filter, $wp_current_filter;

// Do 'all' actions first.

if ( isset( $wp_filter['all'] ) ) {

$wp_current_filter[] = $tag;

$all_args = func_get_args(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection

_wp_call_all_hook( $all_args );

}

if ( ! isset( $wp_filter[ $tag ] ) ) {

if ( isset( $wp_filter['all'] ) ) {

array_pop( $wp_current_filter );

}

return $args[0];

}

if ( ! isset( $wp_filter['all'] ) ) {

$wp_current_filter[] = $tag;

}

$filtered = $wp_filter[ $tag ]->apply_filters( $args[0], $args );

array_pop( $wp_current_filter );

return $filtered;

}

更新日志:
WordPress开发函数apply_filters_ref_array() (https://www.wpmee.com/) WordPress开发教程 第1张
用户贡献的笔记

(由Codex - 5年前贡献)

例子

调用添加的过滤器并传递参数数组:

$args = array( 'arg_1', true, 'foo', 'arg_4' );

apply_filters_ref_array( 'my_filter', $args );

这与:

apply_filters( 'my_filter', 'arg_1', true, 'foo', 'arg_4' );

(由Codex - 5年前贡献)

请注意

当你的参数已经在数组中,或者有很多参数要传递时,这个函数会很有用。只是要确保你的论点是在正确的顺序!

(由Codex - 5年前贡献)

从PHP 5.4开始,数组不再通过引用传递

在PHP 5.4之前,回调函数传递一个指向数组的引用指针。你的回调函数可以使用这个指针来访问所有的数组元素。添加一个过滤器并声明一个挂钩上述过滤器示例的回调函数,如下所示:

function wpdocs_my_callback( $args ) {

// Access values with $args[0], $args[1] etc.

}

add_filter( 'my_filter', 'wpdocs_my_callback' );

因为数组是通过引用传递的,所以对数组元素的任何更改都应用于函数范围之外的原始数组。

无论PHP版本如何,你都可以在添加过滤器时指定数组元素的数量,并在回调函数声明的单独参数中接收每个元素,如下所示:

function wpdocs_my_callback( $arg1, $arg2, $arg3, $arg4 ) {

// Access values with $args1, $args2 etc.

}

add_action( 'my_filter', 'wpdocs_my_callback', 10, 4 );

该方法将数组元素复制到参数变量中。对形参变量的任何更改都不会影响原始数组。

从PHP 5.4开始,数组不再通过引用传递,不管函数名是什么。你甚至不能使用引用符号' & ',因为调用时间通过引用现在抛出一个错误。你可以做的是将引用指针作为数组元素传递。这样做需要添加到过滤器的所有回调函数都需要一个引用指针。这不是你在WordPress操作中看到的东西。此技术仅供参考之用。

apply_filters_ref_array( 'my_filter', array( &$args ) );

function wpdocs_my_callback( &$args ) {

//access values with $args[0], $args[1] etc.

}

add_action('my_filter', 'wpdocs_my_callback');

因为原始数组是通过引用传递的,所以对数组元素的任何更改都应用于函数范围之外的原始数组。

喜欢这个文章就点个赞分享给好友吧~

END

发表评论

一次支付终身使用
免费版本更新
靠谱的技术支持
成为会员