tribe_without_filters( array $filters, callable $do )
Runs a callback or Closure taking care to detach and reattach a set of filters.
Contents
The purpose of this function is to make sure a certain callback will run in a "clean" filter environment where a set of filters (and actions) has been suspended to avoid side effects from applying to it. The function guarantees the existing filters will be detached and re-attached only to run the callback, avoiding issues where some piece of code might detach some filters and not re-attach them due to errors.
Parameters
- $filters
-
(<span class="array">array) (Required) A set of filter, or actions, handles to detach before running the callback and re-attach after.
- $do
-
(callable) (Required) The callback, or Closure, that should run in the context where the specified set of filters has been "suspended".
Return
(mixed) The result of the callback function.
Source
File: src/functions/utils.php
function tribe_without_filters( array $filters, callable $do ) {
$filter_backups = [];
// If none of the filters to skip has anything attached to it, then skip it.
$hooked_filters = array_filter( $filters, 'has_filter' );
if ( empty( $hooked_filters ) ) {
// No filter has functions attached to it, just return the callback invocation.
return $do();
}
foreach ( $hooked_filters as $tag ) {
$filter_backups[ $tag ] = $GLOBALS['wp_filter'][ $tag ];
// A `null` entry will be parsed, from filter API functions, as a filter that has nothing on it.
$GLOBALS['wp_filter'][ $tag ] = null;
}
$result = $do();
foreach ( $filter_backups as $tag => $filter_backup ) {
$GLOBALS['wp_filter'][ $tag ] = $filter_backup;
}
return $result;
}
Changelog
| Version | Description |
|---|---|
| 4.12.10 | Introduced. |