Hooks Service
Last updated
Was this helpful?
Last updated
Was this helpful?
The hooks service is first-of-all and second-of-all a object. It's a service designed to work with WordPress actions and filters (commonly referred to as hooks). Basically the service provides the following public methods:
add_action
- registers an action with the handler
remove_action
- removes an action registered with the handler
remove_all_actions
- removes all actions registered with the handler
add_filter
- registers a filter with the handler
remove_filter
- remove a filter registered with the handler
remove_all_filters
- removes all filters registered with the handler
All of these methods are just wrappers against the registered handler. Any handler implementing the can be registered with the hooks service, but you may also decide to simply use the default handler instantiated if no handler is passed on in the constructor. The default handler is an instance of the inspired defined in the .
The default handler maintains all of the registered hooks in protected arrays and calls WordPress' own add_action
and add_filter
functions on its own run
action.
This approach arguably has its downsides. For example, you can't use any of your own hooks during plugin initialization (because that's when you're supposed to call run
on the service). If you want to bypass this, there are 2 options available:
Just don't use the service. We think the advantages outweigh the disadvantages, but that's for you to decide.
Write your own custom handler implementing the interface and have it call the WP API directly.
There are 3 traits available for working with the hooks service.
Putting it all together, your code could look something like this:
First there is the and the corresponding . Basically this allows you to call upon the hooks service instance from anywhere within the object. Technically, you can also use more than one service in your plugin and register different ones with different objects.
The second method involves injecting the hooks service from outside the instance. This behavior is modelled by the interface and the .
The recommended way, however, is to use the action trait. It's an for automagically calling the aforementioned register_hooks
methods upon the setup
action. If attempts to obtain an instance of the HooksService
either from the object itself (if it implements the HooksServiceAwareInterface
interface) or from a container.
There is also an accompanying action trait. This one attempts to set the hooks service on the instance by first querying its parent and lastly the container for an instance.