[wp-trac] [WordPress Trac] #22256: Hook namespacing
WordPress Trac
noreply at wordpress.org
Mon Oct 22 19:48:04 UTC 2012
#22256: Hook namespacing
-------------------------+------------------------------
Reporter: scribu | Owner:
Type: enhancement | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Plugins | Version:
Severity: normal | Resolution:
Keywords: |
-------------------------+------------------------------
Old description:
> Currently, callbacks passed to add_action() and add_filter() are already
> sort of namespaced by the hook name, by priority and by the callback
> itself. You need to know all of them in order to use `remove_action()`
> successfully.
>
> Acquiring the callback is especially problematic when it's:
>
> * an instance method, and you don't have access to the instance
> * a PHP 5.3 closure
>
> Introducing namespaces for hooks, similar to jQuery's
> [http://docs.jquery.com/Namespaced_Events namespaced events], would not
> only take care of that problem, but also enable things like removing all
> callbacks added by plugin X, regardless of hook name or anything else.
>
> Proposed syntax:
>
> {{{
> add_action( 'after_setup_theme.twentytwelve', function() {
> // do stuff
> }
>
> add_action( 'after_setup_theme.twentytwelve', function() {
> // do more stuff
> }
>
> add_filter( 'posts_clauses.p2p', function( $clauses ) {
> // do stuff
> }
> }}}
>
> Later:
>
> {{{
> // remove specific callbacks added by the Twentytwelve theme
> remove_action( 'after_setup_theme.twentytwelve' );
>
> // remove all callbacks added by the P2P plugin
> remove_action( '*.p2p' );
> }}}
New description:
Currently, callbacks passed to add_action() and add_filter() are already
sort of namespaced by the hook name, by priority and by the callback
itself. You need to know all of them in order to use `remove_action()`
successfully.
Acquiring the callback is especially problematic when it's:
* an instance method, and you don't have access to the instance
* a PHP 5.3 closure
Introducing namespaces for hooks, similar to jQuery's
[http://docs.jquery.com/Namespaced_Events namespaced events], would not
only take care of that problem, but also enable things like removing all
callbacks added by plugin X, regardless of hook name or anything else.
Proposed syntax:
{{{
add_action( 'after_setup_theme.twentytwelve', function() {
// do stuff
}
add_action( 'after_setup_theme.twentytwelve', function() {
// do more stuff
}
add_filter( 'posts_clauses.p2p', function( $clauses ) {
// do stuff
}
}}}
Later:
{{{
// remove specific callbacks added by the Twentytwelve theme
remove_action( 'after_setup_theme.twentytwelve' );
// remove all callbacks added by the P2P plugin
remove_action( '*.p2p' );
}}}
Source: http://core.trac.wordpress.org/ticket/22250#comment:14
--
Comment (by scribu):
I know! Let's use the `\` character as the namespace separator. </sarcasm-
aimed-at-PHP-language-designers>
I haven't see any hook names with dots in them, though.
Anyway, #21883 looks interesting as well.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/22256#comment:6>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list