|null */ private static $prefixes = null; /** * Load prefixes: prefix => plugin directory slug. * * @return array */ public static function prefixes(): array { if ( null !== self::$prefixes ) { return self::$prefixes; } $file = BLOATWRIGHT_DIR . 'data/option-prefixes.json'; $json = is_readable( $file ) ? file_get_contents( $file ) : ''; // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- bundled data file. $data = is_string( $json ) ? json_decode( $json, true ) : null; $map = is_array( $data ) && isset( $data['prefixes'] ) ? (array) $data['prefixes'] : array(); $map = (array) apply_filters( 'bloatwright_option_prefixes', $map ); uksort( $map, static function ( $a, $b ) { return strlen( (string) $b ) <=> strlen( (string) $a ); } ); self::$prefixes = $map; return $map; } /** * Registry version string. */ public static function version(): string { $file = BLOATWRIGHT_DIR . 'data/option-prefixes.json'; $json = is_readable( $file ) ? file_get_contents( $file ) : ''; // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- bundled data file. $data = is_string( $json ) ? json_decode( $json, true ) : null; return is_array( $data ) ? (string) ( $data['version'] ?? '' ) : ''; } /** * Plugin slug for an option name, or '' when unknown. * * @param string $option Option name. */ public static function match( string $option ): string { $name = $option; foreach ( array( '_transient_timeout_', '_transient_', '_site_transient_timeout_', '_site_transient_' ) as $t ) { if ( 0 === strpos( $name, $t ) ) { $name = substr( $name, strlen( $t ) ); break; } } foreach ( self::prefixes() as $prefix => $slug ) { if ( 0 === strpos( $name, (string) $prefix ) ) { return (string) $slug; } } return ''; } /** * Reset cache (tests). */ public static function flush(): void { self::$prefixes = null; } }