How to Unhook a Function From a Filter in WordPress
The function remove_filter
unhooks a function from a filter in WordPress.
Background
WordPress filters are a mechanism to allow the replacement of values produced by the code being run. A filter consists of a name and a set of callbacks. Triggering a filter means executing all callbacks hooked to the filter.
In some cases, a function hooked to a filter causes an undesired result when the filter is triggered. In other cases, the hooking is unnecessary.
Syntax
remove_filter($tag, $function, $priority)
removes the function $function
from the set of callbacks of the $tag
filter. $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 errors:
$priority
must match the priority specified in theadd_filter
call that hooked the function to the filterremove_filter
must be executed after the correspondingadd_filter
call
Example
By default, WordPress replaces double line breaks in the post content with <p>
elements. It happens because the WordPress Core hooks the function wpautop
to the 'the_content'
filter.
Follow this procedure to disable the previous behavior. It is adaptable to any filter/function pair.
Step 1: Find where the function is hooked to the filter in the codebase.
The function add_filter
hooks a function to a filter in WordPress. Open the search feature of the IDE and find occurrences of the text 'wpautop'
in the codebase. Go to the occurrence where the text appears in a call to add_filter
and 'the_content'
is the target filter. You will find that this occurrence is in the file default-filters.php.
Do not forget the single quotes in the search criterion.
add_filter('the_content', 'wpautop');
Step 2: Unhook the function from the filter.
Copy the previous statement to a location executed later. Replace add_filter
with remove_filter
.
remove_filter('the_content', 'wpautop');
Step 3: Test.
Visit a post containing double line breaks in the post content and verify that they were not converted to <p>
elements. Note that this conversion never happens if you are using the block editor.
Further reading
I recommend the other tutorials in this series to learn more about filters in WordPress.
- Filters in WordPress
- How to Hook a Function to a Filter in WordPress
- How to Trigger a Filter in WordPress
- How to Unhook a Function From a Filter in WordPress
Exercise
By default, if the post content or the post excerpt contains smiley codes, WordPress renders the corresponding image. Propose a solution to disable this behavior.
/* Sample smiley codes */
:)
:D
:(
;)
:|
Source code
The source code developed in this tutorial, including a possible answer to the exercise, is available here.
Comments