WordPress Action and Filter Hooks

WordPress Action and Filter Hooks are a powerful feature that allow developers to extend and customize the functionality of WordPress without modifying core files. There are two
primary types of hooks on WordPress: Action Hooks and Filter Hooks. This article will delve into both types of hooks, providing explanations and practical examples
to help you understand and use them effectively.

What are Hooks?

Hooks are a way for developers to “hook into” WordPress at specific points during its execution. They allow you to run your own custom code at certain points in the
WordPress lifecycle. Hooks are categorized into two types:

1) Action Hooks: Allow you to add or modify functionality at various points.
2) Filter Hooks: Allow you to modify data before it is used or displayed.

Action Hooks

Action Hooks are used to add or execute custom code at specific points. For example, you can use action hooks to add content to the WordPress admin area, display
additional fields on a post, or perform actions when a post is published.

Basic Syntax

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
add_action('hook_name', 'your_function_name');
?>
<?php add_action('hook_name', 'your_function_name'); ?>
<?php
add_action('hook_name', 'your_function_name');
?>

1) hook_name is the name of the hook you are targeting.
2) your_function_name is the name of the function you want to execute when the hook is called.

Example 1: Adding a Custom Message to the Footer

Let’s say you want to add a custom message to the footer of your WordPress site. You can use the wp_footer action hook for this.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_footer_message() {
echo '<p>Thank you for visiting our website!</p>';
}
add_action('wp_footer', 'custom_footer_message');
?>
<?php // Add this code to your theme's functions.php file or a custom plugin function custom_footer_message() { echo '<p>Thank you for visiting our website!</p>'; } add_action('wp_footer', 'custom_footer_message'); ?>
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_footer_message() {
    echo '<p>Thank you for visiting our website!</p>';
}
add_action('wp_footer', 'custom_footer_message');
?>

Example 2: Sending an Email Notification When a Post is Published

If you want to send an email notification when a post is published, you can use the publish_post action hook.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Add this code to your theme's functions.php file or a custom plugin
function notify_on_post_publish($post_ID) {
$post = get_post($post_ID);
$to = 'admin@example.com';
$subject = 'New Post Published: ' . $post->post_title;
$message = 'A new post has been published on your site: ' . get_permalink($post_ID);
wp_mail($to, $subject, $message);
}
add_action('publish_post', 'notify_on_post_publish');
?>
<?php // Add this code to your theme's functions.php file or a custom plugin function notify_on_post_publish($post_ID) { $post = get_post($post_ID); $to = 'admin@example.com'; $subject = 'New Post Published: ' . $post->post_title; $message = 'A new post has been published on your site: ' . get_permalink($post_ID); wp_mail($to, $subject, $message); } add_action('publish_post', 'notify_on_post_publish'); ?>
<?php
// Add this code to your theme's functions.php file or a custom plugin
function notify_on_post_publish($post_ID) {
    $post = get_post($post_ID);
    $to = 'admin@example.com';
    $subject = 'New Post Published: ' . $post->post_title;
    $message = 'A new post has been published on your site: ' . get_permalink($post_ID);
    wp_mail($to, $subject, $message);
}
add_action('publish_post', 'notify_on_post_publish');
?>

Filter Hooks

Filter Hooks are used to modify data before it is displayed or saved. They allow you to intercept and change the content of a variable before it is sent to the
browser or database.

Basic Syntax

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
add_filter('hook_name', 'your_function_name', priority, accepted_args);
?>
<?php add_filter('hook_name', 'your_function_name', priority, accepted_args); ?>
<?php
add_filter('hook_name', 'your_function_name', priority, accepted_args);
?>

1) hook_name is the name of the filter hook you are targeting.
2) your_function_name is the name of the function that will modify the data.
3) priority (optional) is the order in which the functions are executed. Default is 10.
4) accepted_args (optional) is the number of arguments the function accepts. Default is 1.

Example 1: Modifying the Excerpt Length

To change the length of the post excerpt, you can use the excerpt_length filter hook.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_excerpt_length($length) {
return 20; // Set excerpt length to 20 words
}
add_filter('excerpt_length', 'custom_excerpt_length');
?>
<?php // Add this code to your theme's functions.php file or a custom plugin function custom_excerpt_length($length) { return 20; // Set excerpt length to 20 words } add_filter('excerpt_length', 'custom_excerpt_length'); ?>
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_excerpt_length($length) {
    return 20; // Set excerpt length to 20 words
}
add_filter('excerpt_length', 'custom_excerpt_length');
?>

Example 2: Adding a Custom Class to the Body Tag

If you want to add a custom class to the body tag of your theme, you can use the body_class filter hook.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_body_class($classes) {
$classes[] = 'custom-class';
return $classes;
}
add_filter('body_class', 'custom_body_class');
?>
<?php // Add this code to your theme's functions.php file or a custom plugin function custom_body_class($classes) { $classes[] = 'custom-class'; return $classes; } add_filter('body_class', 'custom_body_class'); ?>
<?php
// Add this code to your theme's functions.php file or a custom plugin
function custom_body_class($classes) {
    $classes[] = 'custom-class';
    return $classes;
}
add_filter('body_class', 'custom_body_class');
?>

Creating Custom Hooks

In addition to the built-in hooks provided by WordPress, you can also create your own custom hooks. This is particularly useful when you want to allow other
developers or future versions of your plugin/theme to extend its functionality.

Creating a Custom Action Hook

To create a custom action hook, you use do_action() in your code. This is where you define the hook that other functions can attach to.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Define your custom action hook
function my_custom_action() {
do_action('my_custom_hook');
}
// Use the custom action hook in your theme or plugin
add_action('wp_footer', 'my_custom_action');
?>
<?php // Define your custom action hook function my_custom_action() { do_action('my_custom_hook'); } // Use the custom action hook in your theme or plugin add_action('wp_footer', 'my_custom_action'); ?>
<?php
// Define your custom action hook
function my_custom_action() {
    do_action('my_custom_hook');
}
// Use the custom action hook in your theme or plugin
add_action('wp_footer', 'my_custom_action');
?>

You can then add functions to this hook from other parts of your theme or plugins:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Add a function to your custom hook
function custom_function_for_my_custom_hook() {
echo '<p>This content is added via a custom action hook.</p>';
}
add_action('my_custom_hook', 'custom_function_for_my_custom_hook');
?>
<?php // Add a function to your custom hook function custom_function_for_my_custom_hook() { echo '<p>This content is added via a custom action hook.</p>'; } add_action('my_custom_hook', 'custom_function_for_my_custom_hook'); ?>
<?php
// Add a function to your custom hook
function custom_function_for_my_custom_hook() {
    echo '<p>This content is added via a custom action hook.</p>';
}
add_action('my_custom_hook', 'custom_function_for_my_custom_hook');
?>

Creating a Custom Filter Hook
Similarly, you can create a custom filter hook using apply_filters().

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Define your custom filter hook
function my_custom_filter($content) {
return apply_filters('my_custom_filter_hook', $content);
}
// Use the custom filter hook in your theme or plugin
function custom_filter_content($content) {
return $content . '<p>This content is added via a custom filter hook.</p>';
}
add_filter('my_custom_filter_hook', 'custom_filter_content');
?>
<?php // Define your custom filter hook function my_custom_filter($content) { return apply_filters('my_custom_filter_hook', $content); } // Use the custom filter hook in your theme or plugin function custom_filter_content($content) { return $content . '<p>This content is added via a custom filter hook.</p>'; } add_filter('my_custom_filter_hook', 'custom_filter_content'); ?>
<?php
// Define your custom filter hook
function my_custom_filter($content) {
    return apply_filters('my_custom_filter_hook', $content);
}

// Use the custom filter hook in your theme or plugin
function custom_filter_content($content) {
    return $content . '<p>This content is added via a custom filter hook.</p>';
}
add_filter('my_custom_filter_hook', 'custom_filter_content');
?>

Summary:

Hooks are an essential part of WordPress development that allow you to extend and customize WordPress functionality.
1) Action Hooks enable you to add custom functionality at specific points during WordPress execution.
2) Filter Hooks allow you to modify data before it is displayed or saved.

Leave a Reply