In remove_all_filters(), only remove callbacks that match the $priority parameter.

Props GeertDD, valendesigns.
Fixes #20920.

git-svn-id: https://develop.svn.wordpress.org/trunk@31014 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2014-12-31 19:06:29 +00:00
parent 4d69dbadee
commit f71821dc05
2 changed files with 22 additions and 3 deletions

View File

@ -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();
}
}

View File

@ -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
*/