diff --git a/classes/filters.php b/classes/filters.php index a68edaa..a014550 100644 --- a/classes/filters.php +++ b/classes/filters.php @@ -48,7 +48,20 @@ class Filters { } foreach ( self::$filters as $pattern ) { if ( $pattern['enabled'] || false !== $force ) { - $data = trim( preg_replace( $pattern['match'], $pattern['replace'], $data ) ); + if ( ! empty( $pattern['callback'] ) && is_array( $pattern['callback'] ) ) { + $result = preg_replace_callback( + $pattern['match'], + $pattern['callback'], + $data + ); + } else { + $result = preg_replace( + $pattern['match'], + $pattern['replace'], + $data + ); + } + $data = trim( $result ); } } return $data; @@ -59,13 +72,20 @@ class Filters { return $data; } if ( self::$filters[$name]['enabled'] || false !== $force ) { - $data = trim( - preg_replace( + if ( ! empty( self::$filters[$name]['callback'] ) && is_array( self::$filters[$name]['callback'] ) ) { + $result = preg_replace_callback( + self::$filters[$name]['match'], + self::$filters[$name]['callback'], + $data + ); + } else { + $result = preg_replace( self::$filters[$name]['match'], self::$filters[$name]['replace'], $data - ) - ); + ); + } + $data = trim( $result ); } return $data; } @@ -78,12 +98,21 @@ class Filters { * @param {string} [$replace] * @param {bool} [$enabled] - Whether the filter should be enabled or disabled. */ - public static function add( $filterName, $match, $replace, $enabled = false ) { + public static function add( $filterName, $match, $replace, $enabled = false, $callback = false ) { if ( isset( self::$filters[$filterName] ) ) { Debug::error( "Filter already exists: $filterName" ); return; } - self::$filters[$filterName] = [ + if ( $callback === true ) { + self::$filters[ $filterName ] = [ + 'name' => $filterName, + 'match' => $match, + 'callback' => $replace, + 'enabled' => $enabled, + ]; + return; + } + self::$filters[ $filterName ] = [ 'name' => $filterName, 'match' => $match, 'replace' => $replace,