WordPress is highly extensible because of its hooks system. Hooks allow developers to run custom code at specific points in WordPress execution. Understanding actions and filters is crucial for building plugins, themes, and custom functionality.
📌 What Are Hooks?
Hooks are placeholders in WordPress code where you can “hook in” your own functions. They are the foundation of the WordPress plugin architecture.
Hooks come in two main types:
- Actions – Perform tasks.
- Filters – Modify data and return it.
Think of it like this:
- Actions = “Do something”
- Filters = “Change something”
📌 Actions in WordPress
Actions are hooks that let you execute custom code at specific points, such as when WordPress initializes, a post is saved, or a page is loaded.
🔹 Basic Syntax
add_action( 'hook_name', 'callback_function', $priority = 10, $accepted_args = 1 );
- hook_name → The name of the WordPress action you want to hook into (e.g.,
init). - callback_function → Your function that runs when the action is triggered.
- priority → Determines the order in which multiple functions hooked to the same action run (default
10). - accepted_args → Number of arguments your function accepts.
🔹 Example
add_action( 'init', function () {
// Register a custom post type
register_post_type( 'book', [
'label' => 'Books',
'public' => true
]);
});
In this example, WordPress runs the function when it initializes (init), allowing you to register custom content types or other setup tasks.
📌 Filters in WordPress
Filters let you modify data before it is displayed or processed. Unlike actions, filters must return a value, which WordPress then uses.
🔹 Basic Syntax
add_filter( 'hook_name', 'callback_function', $priority = 10, $accepted_args = 1 );
- Works similarly to actions, but your function must return the modified data.
🔹 Example
add_filter( 'the_title', function ( $title ) {
return $title . ' ✨';
});
Here, every post title is modified by appending a sparkle emoji. WordPress replaces the original title with the returned value.
📌 Key Differences: Actions vs Filters
| Feature | Action | Filter |
|---|---|---|
| Purpose | Perform tasks | Modify or return data |
| Return value | Not required | Must return a value |
| Example Hooks | init, wp_footer, save_post | the_content, the_title, widget_text |
| Typical Usage | Add scripts, register post types, send emails | Modify content, titles, meta, or options |
| Number of Functions | Can attach multiple functions; order controlled by priority | Can attach multiple functions; final output affected by all filters |
| Execution Flow | Fires at specific points in WordPress execution | Runs when data is processed/returned |
📌 Priority and Arguments
Both actions and filters allow you to set:
- Priority – Determines order of execution. Lower numbers run first.
- Accepted Arguments – How many parameters your callback receives.
Example:
// Run first
add_action( 'save_post', 'early_save_hook', 5 );
// Run later
add_action( 'save_post', 'late_save_hook', 15 );
📌 Practical Tips
- Use actions for side effects
- Adding scripts or styles
- Sending notifications
- Logging data
- Use filters for data modification
- Modify post content before display
- Customize widget output
- Change form field values
- Combine wisely
- Some scenarios require both: an action to trigger logic, and a filter to adjust output.
