How to Unhook a Function From an Action in WordPress
The function remove_action
unhooks a function from an action in WordPress.
Background
WordPress actions allow the injection of code into a subject to perform custom tasks. An action consists of a name and a set of callbacks. The function do_action
triggers an action. This means that WordPress executes all callbacks hooked to the action.
In some cases, a function hooked to an action causes an undesired result when the action is triggered. In other cases, the hooking is unnecessary.
Syntax
remove_action($tag, $function, $priority)
removes the function $function
from the set of callbacks of the $tag
action. $priority
is the current priority of $function
within the set of callbacks. If $priority
is not specified, it takes a value of 10. The result is TRUE
if the function was successfully removed, otherwise FALSE
.
Keep in mind these tips to avoid common mistakes:
$priority
must match the priority specified in theadd_action
call that hooked the function to the actionremove_action
must be executed after the correspondingadd_action
call
Example
By default, WordPress adds to the <head>
element of every web page a <meta>
element that indicates the version being executed.
<meta name="generator" content="WordPress X.Y.Z" />
It is considered a security risk to make the WordPress version publicly visible. Best practices recommend hiding this information. This meta tag is generated because the WordPress Core hooks the function wp_generator
to the 'wp_head'
action, which by convention is triggered at the end of the <head>
element.
The solution to this problem is to remove the function wp_generator
from the set of callbacks of the 'wp_head'
action. Follow this methodology to achieve this purpose. It is adaptable to any action/function pair.
Step 1: Find where the function is hooked to the action in the codebase.
The function add_action
hooks a function to an action in WordPress. Open the search feature of the IDE and find occurrences of the text 'wp_generator'
in the codebase. Go to the occurrence where the text appears in a call to add_action
and 'wp_head'
is the target action. You will find that this occurrence is in the file default-filters.php.
Do not forget the single quotes in the search criterion.
add_action('wp_head', 'wp_generator');
Step 2: Unhook the function from the action.
Copy the previous statement to a location executed later. Replace add_action
with remove_action
.
remove_action('wp_head', 'wp_generator');
Step 3: Test.
Inspect the source code of any web page and verify that a generator meta does not appear in the <head>
element.
Further reading
I recommend the other tutorials in this series to learn more about actions in WordPress.
Exercise
If the checkbox “Discourage search engines from indexing this site” of the administrative screen Settings > Reading is enabled, the following element appears in the <head>
element of every web page.
<meta name='robots' content='noindex,follow' />
Propose a solution so this meta is never printed, regardless of the configuration set in Settings > Reading.
Source code
The source code developed in this tutorial, including a possible answer to the exercise, is available here.
Comments