apply_filters( string $hook_name, mixed $value, mixed $args ): mixed

Calls the callback functions that have been added to a filter hook.


This function invokes all functions attached to filter hook $hook_name.
It is possible to create new filter hooks by simply calling this function, specifying the name of the new hook using the $hook_name parameter.

The function also allows for multiple additional arguments to be passed to hooks.

Example usage:

// The 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
 * that's hooked onto `example_filter` above.
 * - 'example_filter' is the filter hook.
 * - '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 );

Top ↑


$hook_name string Required
The name of the filter hook.
$value mixed Required
The value to filter.
$args mixed Required
Additional parameters to pass to the callback functions.

Top ↑


mixed The filtered value after all hooked functions are applied to it.

Top ↑


File: wp-includes/plugin.php. View all references

function apply_filters( $hook_name, $value, ...$args ) {
	global $wp_filter, $wp_filters, $wp_current_filter;

	if ( ! isset( $wp_filters[ $hook_name ] ) ) {
		$wp_filters[ $hook_name ] = 1;
	} else {
		++$wp_filters[ $hook_name ];

	// Do 'all' actions first.
	if ( isset( $wp_filter['all'] ) ) {
		$wp_current_filter[] = $hook_name;

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

	if ( ! isset( $wp_filter[ $hook_name ] ) ) {
		if ( isset( $wp_filter['all'] ) ) {
			array_pop( $wp_current_filter );

		return $value;

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

	// Pass the value to WP_Hook.
	array_unshift( $args, $value );

	$filtered = $wp_filter[ $hook_name ]->apply_filters( $value, $args );

	array_pop( $wp_current_filter );

	return $filtered;

Top ↑


Version Description
6.0.0 Formalized the existing and already documented ...$args parameter by adding it to the function signature.
0.71 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Codex

    Echo after Filtering

    echo apply_filters( $tag, $value );

    Get Filtered

    $myvar = apply_filters( $tag, $value );

    Additional Filter Arguments

    $myvar = apply_filters( $tag, $value, $param, $otherparam );

    For example:

    $myvar = apply_filters( 'example_filter', 'filter me', 'arg1', 'arg2 ');

    With the_title filter

    $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.
  2. Skip to note 2 content
    Contributed by icc97

    One fundamental argument that is easy to miss is specifying the number of arguments. Most filters have only one argument and so people drop the argument from add_filter.

    The 3, below is very important.

    add_filter( 'example_filter', 'example_callback', 10, 3 );

    Otherwise you get the following error, such as this StackOverflow question(

    Missing argument 2 for example_callback()

  3. Skip to note 3 content
    Contributed by Dave Gaskin

    Something that is not obvious from reading this function’s definition and description is that if add_filter( 'filter_name', 'filter_function' ) is never called/executed in code, the use of apply_filters( 'filter_name', $value ) will return the value of $value by default.

    I noticed a call to apply_filters( 'my_filter', ... ) in my theme’s functions.php file and couldn’t find a similar add_filter( 'my_filter', ... ) call anywhere else and was confused about this (I’m still wrapping my head around filters/hooks).

    More detail on this can be seen in the example found on this page: at the section about Filters.

  4. Skip to note 5 content
    Contributed by tampadave

    Uh huh.

    apply_filters ( string $tag, mixed $value );

    function apply_filters( $tag, $value )

    $tag — (string) (Required) The name of the filter hook.
    $value — (mixed) (Required) The value on which the filters hooked to $tag are applied on.
    $var — (mixed) (Required) Additional variables passed to the functions hooked to $tag.

    Right. Tip: this does not make sense, in case you missed it.

You must log in before being able to contribute a note or feedback.