WP Cache Helper is a simple WordPress library class to introduce convenient new caching functions.
Built to support group cache flush for WordPress' object cache, which is not supported by core yet.
- Inspired from WP Cache Remember.
 
This helper can simplify something like this:
function do_something() {
    $cache_key = 'some-cache-key';
    $cached    = wp_cache_get( $cache_key );
    // Return the cached value.
    if ( $cached ) {
        return $cached;
    }
    // Do all the work to calculate the value.
    $value = a_whole_lotta_processing();
    // Cache the value.
    wp_cache_set( $cache_key, $value );
    return $value;
}That pattern works well, but there's a lot of repeated code. This package draws inspiration from Laravel's Cache::remember() method; using Cache::remember(), the same code from above becomes:
// Use this as a global variable or something.
$cache = new \DuckDev\Cache\Cache();
function do_something() {
    return $cache->remember( 'some-cache-key', function () {
        return a_whole_lotta_processing();
    } );
}The recommended way to install this library in your project is via Composer:
$ composer require duckdev/wp-cache-helperWP Cache Remember provides the following functions for WordPress:
$cache->remember()$cache->forget()$cache->persist()$cache->cease()$cache->flush_group()$cache->flush()
Each function checks the response of the callback for a WP_Error object, ensuring you're not caching temporary errors for long periods of time. PHP Exceptions will also not be cached.
Retrieve a value from the object cache. If it doesn't exist, run the $callback to generate and cache the value.
- (string) $key
 - The cache key.
 - (callable) $callback
 - The callback used to generate and cache the value.
 - (string) $group
 - Optional. The cache group. Default is empty.
 - (int) $expire
 - Optional. The number of seconds before the cache entry should expire. Default is 0 (as long as possible).
 
function get_latest_posts() {
    return $cache->remember( 'latest_posts', function () {
        return new WP_Query( array(
            'posts_per_page' => 5,
            'orderby'        => 'post_date',
            'order'          => 'desc',
        ) );
    }, 'my-cache-group', HOUR_IN_SECONDS );
}Retrieve and subsequently delete a value from the object cache.
- (string) $key
 - The cache key.
 - (string) $group
 - Optional. The cache group. Default is empty.
 - (mixed) $default
 - Optional. The default value to return if the given key doesn't exist in the object cache. Default is null.
 
function show_error_message() {
    $error_message = $cache->forget( 'form_errors', 'my-cache-group', false );
    if ( $error_message ) {
        echo 'An error occurred: ' . $error_message;
    }
}Retrieve a value from transients. If it doesn't exist, run the $callback to generate and cache the value.
- (string) $key
 - The cache key.
 - (callable) $callback
 - The callback used to generate and cache the value.
 - (string) $site
 - Should use site transients.
 - (int) $expire
 - Optional. The number of seconds before the cache entry should expire. Default is 0 (as long as possible).
 
function get_tweets() {
    $user_id = get_current_user_id();
    $key     = 'latest_tweets_' . $user_id;
    return $cache->persist( $key, function () use ( $user_id ) {
        return get_latest_tweets_for_user( $user_id );
    }, 15 * MINUTE_IN_SECONDS );
}Retrieve and subsequently delete a value from the transient cache.
- (string) $key
 - The cache key.
 - (string) $site
 - Should use site transients.
 - (mixed) $default
 - Optional. The default value to return if the given key doesn't exist in transients. Default is null.
 
Flush a cache group items. Use this and do not flush entire cache.
- (string) $group
 - The cache group name.
 
Wrapper for wp_cache_flush to check if other method is available for flushing if wp_cache_flush is disabled.
- Maintained by Joel James