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:
$prioritymust match the priority specified in theadd_actioncall that hooked the function to the actionremove_actionmust be executed after the correspondingadd_actioncall
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.
- Actions in WordPress
- How to Hook a Function to an Action in WordPress
- How to Trigger an Action in WordPress
- How to Unhook a Function From an Action 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