airesvsg / wp-rest-api-cache

Enable caching for WordPress REST API and increase speed of your application
http://wordpress.org/plugins/wp-rest-api-cache
247 stars 37 forks source link
api cache rest rest-api wordpress wp

WP REST API Cache

Enable caching for WordPress REST API and increase speed of your application

Installation

  1. Copy the wp-rest-api-cache folder into your wp-content/plugins folder
  2. Activate the WP REST API Cache plugin via the plugin admin page

Filters

Filter Argument(s)
rest_cache_headers array $headers
string $request_uri
WP_REST_Server $server
WP_REST_Request $request
rest_cache_skip boolean $skip ( default: WP_DEBUG )
string $request_uri
WP_REST_Server $server
WP_REST_Request $request
rest_cache_key string $request_uri
WP_REST_Server $server
WP_REST_Request $request
rest_cache_timeout int $timeout
int $length
int $period
rest_cache_update_options array $options
rest_cache_get_options array $options
rest_cache_show_admin boolean $show
rest_cache_show_admin_menu boolean $show
rest_cache_show_admin_bar_menu boolean $show

How to use filters

add_filter( 'rest_cache_headers', function( $headers ) {
    $headers['Cache-Control'] = 'public, max-age=3600';

    return $headers;
} );
add_filter( 'rest_cache_timeout', function() {
    // https://codex.wordpress.org/Transients_API#Using_Time_Constants
    return 15 * DAY_IN_SECONDS;
} );

or

add_filter( 'rest_cache_get_options', function( $options ) {
    if ( ! isset( $options['timeout'] ) ) {
        $options['timeout'] = array();
    }

    // https://codex.wordpress.org/Transients_API#Using_Time_Constants
    $options['timeout']['length'] = 15;
    $options['timeout']['period'] = DAY_IN_SECONDS;

    return $options;
} );
add_filter( 'rest_cache_skip', function( $skip, $request_uri ) {
    if ( ! $skip && false !== stripos( $request_uri, 'wp-json/acf/v2' ) ) {
        return true;
    }

    return $skip;
}, 10, 2 );

WP REST API Cache

You can use the wordpress default filter "save_post" if you like to empty the cache on every save of a post, page or custom post type.

add_action( 'save_post', function( $post_id ) {
  if ( class_exists( 'WP_REST_Cache' ) ) {
    WP_REST_Cache::empty_cache();
  }
} );