apply_filters()创建一个过滤器钩子,调用所有回调方法

目录

描述

译文

调用添加到过滤器hook上的函数。在Plugin API上查看过滤器hook列表。

通过调用该函数,可以调用附着在过滤器hook $tag上的回调函数。用$tag参数所指定的新hook的名称调用该函数,可创建一个新的过滤器hook。

原文

Call the functions added to a filter hook. See the Plugin API for a list of filter hooks.

The callback functions attached to filter hook $tag are invoked by calling this function. This function can be used to create a new filter hook by simply calling this function with the name of the new hook specified using the $tag parameter.

apply_filters() 描述

用法

 <?php apply_filters$tag$value$var ... ); ?> 

apply_filters() 用法

参数

$tag

(string) (必填) The name of the filter hook.

默认值: None

$value

(mixed) (必填) The value which can be modified by filters hooked to $tag

默认值: None

$var

(mixed) (可选) One or more additional variables passed to the filter functions. You can use this parameter in your function but it will not be returned. This parameter is available since Version 1.5.1.

默认值: None

apply_filters() 参数

示例

Echo after Filtering

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
echo apply_filters( $tag, $value );

Get Filtered

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
$myvar = apply_filters( $tag, $value );

Additional Filter Arguments

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
$myvar = apply_filters( $tag, $value, $param, $otherparam );
For example:
$myvar = apply_filters( 'example_filter', 'filter me', 'arg1', 'arg2 ');

With the_title filter

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
$my_custom_title = apply_filters('the_title', '  My Custom Title (tm)  ');

$my_custom_title will now contain 'My Custom Title ™', since the_title filter applies wptexturize() and trim(), among others.

apply_filters() 示例

历史

  • 添加于 版本: 0.71

apply_filters() 历史

源文件

apply_filters() 函数的代码位于 wp-includes/plugin.php.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * Call the functions added to a filter hook.
 *
 * The callback functions attached to filter hook $tag are invoked by calling
 * this function. This function can be used to create a new filter hook by
 * simply calling this function with the name of the new hook specified using
 * the $tag parameter.
 *
 * The function allows for additional arguments to be added and passed to hooks.
 *
 *     // Our filter callback function
 *     function example_callback( $string, $arg1, $arg2 ) {
 *         // (maybe) modify $string
 *         return $string;
 *     }
 *     add_filter( 'example_filter', 'example_callback', 10, 3 );
 *
 *     /*
 *      * Apply the filters by calling the 'example_callback' function we
 *      * "hooked" to 'example_filter' using the add_filter() function above.
 *      * - 'example_filter' is the filter hook $tag
 *      * - 'filter me' is the value being filtered
 *      * - $arg1 and $arg2 are the additional arguments passed to the callback.
 *     $value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );
 *
 * @since 0.71
 *
 * @global array $wp_filter         Stores all of the filters.
 * @global array $merged_filters    Merges the filter hooks using this function.
 * @global array $wp_current_filter Stores the list of current filters with the current one last.
 *
 * @param string $tag   The name of the filter hook.
 * @param mixed  $value The value on which the filters hooked to `$tag` are applied on.
 * @param mixed  $var   Additional variables passed to the functions hooked to `$tag`.
 * @return mixed The filtered value after all hooked functions are applied to it.
 */
function apply_filters( $tag, $value ) {
	global $wp_filter, $merged_filters, $wp_current_filter;

	$args = array();

	// Do 'all' actions first.
	if ( isset($wp_filter['all']) ) {
		$wp_current_filter[] = $tag;
		$args = func_get_args();
		_wp_call_all_hook($args);
	}

	if ( !isset($wp_filter[$tag]) ) {
		if ( isset($wp_filter['all']) )
			array_pop($wp_current_filter);
		return $value;
	}

	if ( !isset($wp_filter['all']) )
		$wp_current_filter[] = $tag;

	// Sort.
	if ( !isset( $merged_filters[ $tag ] ) ) {
		ksort($wp_filter[$tag]);
		$merged_filters[ $tag ] = true;
	}

	reset( $wp_filter[ $tag ] );

	if ( empty($args) )
		$args = func_get_args();

	do {
		foreach( (array) current($wp_filter[$tag]) as $the_ )
			if ( !is_null($the_['function']) ){
				$args[1] = $value;
				$value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
			}

	} while ( next($wp_filter[$tag]) !== false );

	array_pop( $wp_current_filter );

	return $value;
}

apply_filters() 源文件

相关