name( $group, $key ); $cached = get_transient( $name ); if ( is_array( $cached ) && array_key_exists( 'v', $cached ) ) { return $cached['v']; } $value = $callback(); TransientStore::set( $name, array( 'v' => $value ), $ttl ); return $value; } /** * Invalidates every entry in a group. * * @param string $group Cache group. * @return void */ public function flush( $group ) { OptionUpdate::change( self::VERSIONS_OPTION, static function ( array $versions ) use ( $group ) { $versions[ $group ] = isset( $versions[ $group ] ) ? (int) $versions[ $group ] + 1 : 2; return $versions; } ); } /** * Builds the transient name. Transient names must stay under 172 characters. * * @param string $group Cache group. * @param string $key Key within the group. * @return string */ private function name( $group, $key ) { $versions = $this->versions(); $version = isset( $versions[ $group ] ) ? (int) $versions[ $group ] : 1; return 'tly_' . md5( $group . '|' . $version . '|' . $key ); } /** * Current group versions. * * @return array */ private function versions() { $versions = get_option( self::VERSIONS_OPTION, array() ); return is_array( $versions ) ? $versions : array(); } }