Opened 15 years ago
Closed 12 years ago
#19306 closed enhancement (fixed)
remove_all_filters() should set to array(), not unset
| Reported by: | nacin | Owned by: | wonderboymusic |
|---|---|---|---|
| Priority: | normal | Milestone: | 4.0 |
| Component: | Plugins | Version: | |
| Severity: | normal | Keywords: | has-patch |
| Cc: | Focuses: |
Description
Consider this use case: You want to hook into priority 0 of an action and run remove_all_actions() for all other callbacks.
Since we use current() and next() to iterate, rather than making a copy of $wp_filter to loop through it, this should work.
Unfortunately, current() and next() expect an array, and only stop when next() returns === false. remove_all_filters() does an unset() on $wp_filter[$tag], which means next() returns A) a warning, and B) null. The null causes an indefinite loop.
Test code:
add_filter( 'test_filter', function() { remove_all_filters( 'test_filter' ); return 0; }, 0 );
add_filter( 'test_filter', function() { return 1; }, 1 );
add_filter( 'test_filter', function() { return 2; }, 2 );
var_dump( apply_filters( 'test_filter', -1 ) );
Attachments (2)
Change History (7)
Note:
See TracTickets
for help on using tickets.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)
21 months... wp 3.6 and nobody reviewed this patch???