Skip to content

Instantly share code, notes, and snippets.

@cdsaenz
Forked from westonruter/01-common-example.php
Created November 14, 2022 17:29
Show Gist options
  • Save cdsaenz/15c8509730b1a069c08a528afca658df to your computer and use it in GitHub Desktop.
Save cdsaenz/15c8509730b1a069c08a528afca658df to your computer and use it in GitHub Desktop.
Temporarily disabling filters in WordPress
<?php // Common way to do it:
remove_filter( 'the_title', 'wptexturize' );
$title = get_the_title();
add_filter( 'the_title', 'wptexturize' );
<?php // More robust way to do it, but oh so verbose:
$filter_priority = has_filter( 'the_title', 'wptexturize' );
if ( false !== $filter_priority ) {
remove_filter( 'the_title', 'wptexturize', $filter_priority );
}
$title = get_the_title( $post_ID );
if ( false !== $filter_priority ) {
add_filter( 'the_title', 'wptexturize', $filter_priority );
}
<?php // What if we could do this:
$title = with_filter_disabled( 'the_title', 'wptexturize', function () {
return get_the_title();
} );
<?php
/**
* Run $callback with the $handler disabled for the $hook action/filter
* @param string $hook filter name
* @param callable $handler function
* @param callable $callback function execited while filter disabled
* @return mixed value returned by $callback
*/
function with_filter_disabled( $hook, $handler, $callback ) {
$priority = has_filter( $hook, $handler );
if ( false !== $priority ) {
remove_filter( $hook, $handler, $priority );
}
$retval = call_user_func( $callback );
if ( false !== $priority ) {
$accepted_args = PHP_INT_MAX; // for array_slice, can't use null since cast to int
add_filter( $hook, $handler, $priority, $accepted_args );
}
return $retval;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment