diff --git a/src/wp-includes/plugin.php b/src/wp-includes/plugin.php index 27a65ee1b5..06d727f313 100644 --- a/src/wp-includes/plugin.php +++ b/src/wp-includes/plugin.php @@ -325,10 +325,10 @@ function remove_all_filters( $tag, $priority = false ) { global $wp_filter, $merged_filters; if ( isset( $wp_filter[ $tag ]) ) { - if ( false !== $priority && isset( $wp_filter[ $tag ][ $priority ] ) ) { - $wp_filter[ $tag ][ $priority ] = array(); - } else { + if ( false === $priority ) { $wp_filter[ $tag ] = array(); + } else if ( isset( $wp_filter[ $tag ][ $priority ] ) ) { + $wp_filter[ $tag ][ $priority ] = array(); } } diff --git a/tests/phpunit/tests/filters.php b/tests/phpunit/tests/filters.php index c0eb1250c7..d9eda55a2b 100644 --- a/tests/phpunit/tests/filters.php +++ b/tests/phpunit/tests/filters.php @@ -196,6 +196,25 @@ class Tests_Filters extends WP_UnitTestCase { $this->assertEquals(array($tag), $a->get_tags()); } + /** + * @ticket 20920 + */ + function test_remove_all_filters_should_respect_the_priority_argument() { + $a = new MockAction(); + $tag = rand_str(); + $val = rand_str(); + + add_filter( $tag, array( $a, 'filter' ), 12 ); + $this->assertTrue( has_filter( $tag ) ); + + // Should not be removed. + remove_all_filters( $tag, 11 ); + $this->assertTrue( has_filter( $tag ) ); + + remove_all_filters( $tag, 12 ); + $this->assertFalse( has_filter( $tag ) ); + } + /** * @ticket 9886 */