Adds ability to globally cache certain segments of code.
WP Cache and some other caching plugins work amazingly well, however, their benefits are limited in sites with a large percentage of logged in users. While working on these projects, we, Voce Connect, found the need for a better caching solution. We needed to easily cache rendered portions of the theme that were the same for each user without caching other portions that may have user specific content. The solution was to come up with a plugin that could be easily integrated into a theme to help cache these blocks of content.
Requirements:
- WordPress 2.8 or higher
- "php5" - I'm a big proponent of dropping the php4 compatibility of WordPress due to the improved OO support. Because of this, I prefer to write my plugins in php5 form in hopes to help push the community along.
- Upload
wp-cache-block
folder to the /wp-content/plugins/
directory
- Activate the plugin through the 'Plugins' menu in WordPress
- Add cache block areas to the slower parts of your theme. See below.
Adding a cache block only requires wrapping the section of content you want to cache in a couple of lines of code. The key is make sure that the cache block is uniquely idtentified based on the content it will render.
For simple content that is the same on every page:
`<?php if(wp_cacheblock_start('my-content')) : ?>
//the content you want to cache
`
Content that varies based on page, user, etc, will need to use key builders. Key builders are simple classes that help make a unique key for the block of content based on different parameters.
For caching the_loop in index.php you'll need to add a Query_Unique_Key_Builder which creates a key based on passed in query_var keys:
`<?php $key_builders = array(new Query_Unique_Key_Builder( array ('paged') ) );
$key_builders) ) ) : ?>
//the post loop
`
To cache the comment output, you can use the Pending_Comment_Unique_Key_Builder so users with pending comments will get their own cached page.
`<?php $key_builders = array( new Pending_Comment_Unique_Key_Builder() );
$key_builders) ) ) : ?>
//the comment loop
`
If you're having to render complex data per user, the Per_User_Unique_Key_Builder will help create a unique key per user for the content:
`<?php $key_builders = array( new Per_User_Unique_Key_Builder() );
$key_builders) ) ) : ?>
//the user specific content
`