Title: WP_AI_Client_Cache
Published: May 20, 2026

---

# class WP_AI_Client_Cache {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#description)
 * [Methods](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#wp--skip-link--target)

This class’s access is marked private. This means it is not intended for use by 
plugin or theme developers, only by core. It is listed here for completeness.

WordPress-specific PSR-16 cache adapter for the AI Client.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#description)󠁿

Bridges PSR-16 cache operations to WordPress object cache functions, enabling the
AI client to leverage WordPress caching infrastructure.

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_AI_Client_Cache::clear](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/clear/) | Wipes clean the entire cache’s keys. | 
| [WP_AI_Client_Cache::delete](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/delete/) | Delete an item from the cache by its unique key. | 
| [WP_AI_Client_Cache::deleteMultiple](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/deletemultiple/) | Deletes multiple cache items in a single operation. | 
| [WP_AI_Client_Cache::get](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/get/) | Fetches a value from the cache. | 
| [WP_AI_Client_Cache::getMultiple](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/getmultiple/) | Obtains multiple cache items by their unique keys. | 
| [WP_AI_Client_Cache::has](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/has/) | Determines whether an item is present in the cache. | 
| [WP_AI_Client_Cache::iterable_to_array](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/iterable_to_array/) | Converts an iterable to an array. | 
| [WP_AI_Client_Cache::set](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/set/) | Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time. | 
| [WP_AI_Client_Cache::setMultiple](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/setmultiple/) | Persists a set of key => value pairs in the cache, with an optional TTL. | 
| [WP_AI_Client_Cache::ttl_to_seconds](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/ttl_to_seconds/) | Converts a PSR-16 TTL value to seconds for WordPress cache functions. |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#source)󠁿

    ```php
    class WP_AI_Client_Cache implements CacheInterface {

    	/**
    	 * Cache group used for all cache operations.
    	 *
    	 * @since 7.0.0
    	 * @var string
    	 */
    	private const CACHE_GROUP = 'wp_ai_client';

    	/**
    	 * Fetches a value from the cache.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param string $key           The unique key of this item in the cache.
    	 * @param mixed  $default_value Default value to return if the key does not exist.
    	 * @return mixed The value of the item from the cache, or $default_value in case of cache miss.
    	 */
    	public function get( $key, $default_value = null ) {
    		$found = false;
    		$value = wp_cache_get( $key, self::CACHE_GROUP, false, $found );

    		if ( ! $found ) {
    			return $default_value;
    		}

    		return $value;
    	}

    	/**
    	 * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param string                $key   The key of the item to store.
    	 * @param mixed                 $value The value of the item to store, must be serializable.
    	 * @param null|int|DateInterval $ttl   Optional. The TTL value of this item.
    	 * @return bool True on success and false on failure.
    	 */
    	public function set( $key, $value, $ttl = null ): bool {
    		$expire = $this->ttl_to_seconds( $ttl );

    		return wp_cache_set( $key, $value, self::CACHE_GROUP, $expire );
    	}

    	/**
    	 * Delete an item from the cache by its unique key.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param string $key The unique cache key of the item to delete.
    	 * @return bool True if the item was successfully removed. False if there was an error.
    	 */
    	public function delete( $key ): bool {
    		return wp_cache_delete( $key, self::CACHE_GROUP );
    	}

    	/**
    	 * Wipes clean the entire cache's keys.
    	 *
    	 * This method only clears the cache group used by this adapter. If the underlying
    	 * cache implementation does not support group flushing, this method returns false.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @return bool True on success and false on failure.
    	 */
    	public function clear(): bool {
    		if ( ! function_exists( 'wp_cache_supports' ) || ! wp_cache_supports( 'flush_group' ) ) {
    			return false;
    		}

    		return wp_cache_flush_group( self::CACHE_GROUP );
    	}

    	/**
    	 * Obtains multiple cache items by their unique keys.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param iterable<string> $keys          A list of keys that can be obtained in a single operation.
    	 * @param mixed            $default_value Default value to return for keys that do not exist.
    	 * @return array<string, mixed> A list of key => value pairs.
    	 */
    	public function getMultiple( $keys, $default_value = null ): array {
    		/**
    		 * Keys array.
    		 *
    		 * @var array<string> $keys_array
    		 */
    		$keys_array = $this->iterable_to_array( $keys );
    		$values     = wp_cache_get_multiple( $keys_array, self::CACHE_GROUP );
    		$result     = array();

    		foreach ( $keys_array as $key ) {
    			if ( false === $values[ $key ] ) {
    				// Could be a stored false or a cache miss — disambiguate via get().
    				$result[ $key ] = $this->get( $key, $default_value );
    			} else {
    				$result[ $key ] = $values[ $key ];
    			}
    		}

    		return $result;
    	}

    	/**
    	 * Persists a set of key => value pairs in the cache, with an optional TTL.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param iterable<string, mixed> $values A list of key => value pairs for a multiple-set operation.
    	 * @param null|int|DateInterval   $ttl    Optional. The TTL value of this item.
    	 * @return bool True on success and false on failure.
    	 */
    	public function setMultiple( $values, $ttl = null ): bool {
    		$values_array = $this->iterable_to_array( $values );
    		$expire       = $this->ttl_to_seconds( $ttl );
    		$results      = wp_cache_set_multiple( $values_array, self::CACHE_GROUP, $expire );

    		// Return true only if all operations succeeded.
    		return ! in_array( false, $results, true );
    	}

    	/**
    	 * Deletes multiple cache items in a single operation.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param iterable<string> $keys A list of string-based keys to be deleted.
    	 * @return bool True if the items were successfully removed. False if there was an error.
    	 */
    	public function deleteMultiple( $keys ): bool {
    		$keys_array = $this->iterable_to_array( $keys );
    		$results    = wp_cache_delete_multiple( $keys_array, self::CACHE_GROUP );

    		// Return true only if all operations succeeded.
    		return ! in_array( false, $results, true );
    	}

    	/**
    	 * Determines whether an item is present in the cache.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param string $key The cache item key.
    	 * @return bool True if the item exists in the cache, false otherwise.
    	 */
    	public function has( $key ): bool {
    		$found = false;
    		wp_cache_get( $key, self::CACHE_GROUP, false, $found );

    		return (bool) $found;
    	}

    	/**
    	 * Converts a PSR-16 TTL value to seconds for WordPress cache functions.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param null|int|DateInterval $ttl The TTL value.
    	 * @return int The TTL in seconds, or 0 for no expiration.
    	 */
    	private function ttl_to_seconds( $ttl ): int {
    		if ( null === $ttl ) {
    			return 0;
    		}

    		if ( $ttl instanceof DateInterval ) {
    			$now = new DateTime();
    			$end = ( clone $now )->add( $ttl );

    			return $end->getTimestamp() - $now->getTimestamp();
    		}

    		return max( 0, (int) $ttl );
    	}

    	/**
    	 * Converts an iterable to an array.
    	 *
    	 * @since 7.0.0
    	 *
    	 * @param iterable<mixed> $items The iterable to convert.
    	 * @return array<mixed> The array.
    	 */
    	private function iterable_to_array( $items ): array {
    		if ( is_array( $items ) ) {
    			return $items;
    		}

    		return iterator_to_array( $items );
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php#L22)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php#L22-L216)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_ai_client_cache/?output_format=md#changelog)󠁿

| Version | Description | 
| [7.0.0](https://developer.wordpress.org/reference/since/7.0.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_ai_client_cache%2F)
before being able to contribute a note or feedback.