Skip to content

Instantly share code, notes, and snippets.

@markjaquith
Created May 10, 2012 15:36
Show Gist options
  • Star 99 You must be signed in to star a gist
  • Fork 30 You must be signed in to fork a gist
  • Save markjaquith/2653957 to your computer and use it in GitHub Desktop.
Save markjaquith/2653957 to your computer and use it in GitHub Desktop.
WordPress Fragment Caching convenience wrapper
<?php
/*
Usage:
$frag = new CWS_Fragment_Cache( 'unique-key', 3600 ); // Second param is TTL
if ( !$frag->output() ) { // NOTE, testing for a return of false
functions_that_do_stuff_live();
these_should_echo();
// IMPORTANT
$frag->store();
// YOU CANNOT FORGET THIS. If you do, the site will break.
}
*/
class CWS_Fragment_Cache {
const GROUP = 'cws-fragments';
var $key;
var $ttl;
public function __construct( $key, $ttl ) {
$this->key = $key;
$this->ttl = $ttl;
}
public function output() {
$output = wp_cache_get( $this->key, self::GROUP );
if ( !empty( $output ) ) {
// It was in the cache
echo $output;
return true;
} else {
ob_start();
return false;
}
}
public function store() {
$output = ob_get_flush(); // Flushes the buffers
wp_cache_add( $this->key, $output, self::GROUP, $this->ttl );
}
}
@rask
Copy link

rask commented Mar 23, 2015

Have you tested this on WP Multisite? Didn't see any references to multisite in the WP object cache API documentation.

@elvismdev
Copy link

@markjaquith should I wrap add_action() on my genesis theme with this? e.g.

$frag = new CWS_Fragment_Cache( 'custom-header', 3600 ); // Second param is TTL
    if ( !$frag->output() ) { // NOTE, testing for a return of false

        add_action( 'genesis_header', 'my_custom_header' );

        // IMPORTANT
        $frag->store();
        // YOU CANNOT FORGET THIS. If you do, the site will break.
    }

@danimalweb
Copy link

I used this today and updated it to use transients API. Works like a charm. Thanks.

@yumyo
Copy link

yumyo commented Nov 14, 2016

How to clean individual fragments on, let's say, custom post type save/update?

@zTea90
Copy link

zTea90 commented Jul 26, 2017

Hello, i was try but don't know why it not work.
Just show plant text :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment