ZenCache v151220 was released on December 20th, 2015. This release includes 4 new features, 9 bug fixes, and 12 enhancements, and improved compatibility with bbPress, Akismet, and WooCommerce. New features in this release include the ability to customize the Cache Cleanup Schedule, a new Beta Testers section for the Pro Updater, URI Exclusion Patterns for Client-Side Caching, and a new action in the Clear Cache menu on the Admin Bar that allows you to clear Expired WordPress Transients.

New Feature: Customize Cache Cleanup Schedule

This release includes a new section to customize the Cache Cleanup Schedule and set your own schedule in ZenCache → Plugin Options → Manual Cache Clearing → Cache Cleanup Schedule. You can even build your own custom schedules using a plugin like WP Crontrol and then select those in ZenCache.

ZenCache Pro - Cache Cleanup Schedule

New Feature: Pro Updater for Beta Testers

This release also brings a whole new Beta Testers section to the Pro Plugin Updater that allows you to opt-in to receive notifications about beta releases and update to the latest beta release right from inside ZenCache.

ZenCache Pro - Plugin Updater for Beta Testers

New Feature: URI Exclusion Patterns for Client-Side Caching

The Client-Side Caching panel now includes a new URI Exclusion Patterns for Client-Side Caching that allows you to exclude specific URIs from being cached by a client-side browser (when Client-Side Caching is enabled).

ZenCache Pro - Exclusion Patterns for Client-Side Caching

New Feature: Clear Expired WordPress Transients

And finally, a new action in the Clear Cache menu on the Admin Bar allows you to clear Expired WordPress Transients.

ZenCache Pro - Clear Expired Transients

Other Notable Changes

Other notable changes in this release include improved diagnostic reporting for XML Sitemap-related errors, an improved Cache Cleanup schedule that cleans up expired/stale cache files once every hour instead of once every day, a new default for Static CDN Filters applying to Logged-In Users that is now opt-in instead of opt-out, improved integration with PHP's OPcache (we only invalidate the advanced-cache.php file instead of clearing the whole opcode cache when saving plugin options), improved overall compatibility with dynamic 3rd party plugins through not caching pages that contain _wpnonce in the markup, and finally improvements to the way ZenCache writes to .htaccess files using a new unique comment marker to identify rules that were inserted specifically by ZenCache. This release also includes many bug fixes and other enhancements; see the full changelog below for details.

Changelog for ZenCache Pro v151220

  • New Feature!: It's now possible to customize the Cache Cleanup Schedule and set your own schedule in ZenCache → Plugin Options → Manual Cache Clearing → Cache Cleanup Schedule. ZenCache uses wp_get_schedules() when generating the list of available schedules, which makes it possible to create your own custom cron schedule using a plugin like WP Crontrol and use that to define a custom Cache Cleanup Schedule. Props @kristineds. See Issue #472.
  • New Feature! It's now possible to configure the Pro Plugin Updater to check for Beta versions (Release Candidates) of the plugin. See ZenCache → Plugin Updater → Beta Testers. We publish Release Candidates a week or so before official releases to allow for additional testing and early preview of upcoming features and bug fixes. If you're not already on our Beta Testers mailing list, you can signup here. Props @kristineds. See Issue #352.
  • New Feature! It's now possible to clear Expired WordPress Transients from the Clear Cache Option Menu in the WordPress Admin Bar. The WordPress Transients API has no functionality to automatically clean up expired transients; doing so is left for plugin authors and we've found that very few plugins that use the Transient API actually clean up expired transients properly, which can lead to your database being full of expired transient data that is no longer used. Props @kristineds. See Issue #459.
  • New Feature! Client-Side Caching now includes a new URI Exclusion Patterns for Client-Side Caching, allowing you to exclude specific URIs from being cached by a client-side browser when Client-Side Caching is enabled. Props @renzms. See Issue #498.
  • Bug Fix: Fixed a bug that was generating a "Failed to update your /.htaccess file" error message. The routines that update your .htaccess file were failing if your .htaccess file already contained the word "ZenCache" (case-insensitive). See Issue #617 and Issue #620.
  • Bug Fix: Fixed a bug that in some scenarios could cause custom .htaccess rules to be lost if your .htaccess file was using the exact same comment start and end markers as ZenCache (# BEGIN ZenCache and # END ZenCache). If you were using those exact same start and end markers, ZenCache was replacing whatever was between them with a copy of the ZenCache .htaccess rules. ZenCache now uses a unique marker (WmVuQ2FjaGU) to identify its own code blocks inside your .htaccess file. See Issue #620.
  • Bug Fix: Fixed a bug with clearing cache files for paginated pages where the pagination_base had been changed from the default page to something else (e.g., a translated string). The WP Rewrite API is now used to include pagination_base and comments_pagination_base when building paths to cache files to determine which cache files should be cleared. Props @renzms. See Issue #607.
  • Bug Fix: Fixed a bug with the Static CDN Filters that affected sites using a permalink structure that ended with .htm or .html. This bug was supposed to be fixed back in v151002 but another bug prevented the fix from working properly. This release fixes the issue once and for all. See Issue #495.
  • Bug Fix: With Logged-In User caching enabled, there were some scenarios where the user cache was being cleared on every page load when a user was logged in. ZenCache now hooks into updated_user_metadata instead of update_user_metadata to clear a specific user cache. Props @kristineds. See Issue #623.
  • Bug Fix: Fixed a bug where the Auto-Cache Engine cron event would disappear in some scenarios. Props @patdumond, @MarioKnight. See Issue #613.
  • Bug Fix: ZenCache no longer caches any pages that contain _wpnonce in the markup. This ensures that pages containing time-sensitive nonce values are not cached. Props @kristineds and @jaswsinc. See Issue #601.
  • Bug Fix: This release attempts to resolve reports of Error 500 and Internal Server Error issues when running with PHP 5.6 + OPcache. Instead of clearing the entire Opcode cache whenever the plugin options are saved, we only invalidate the advanced-cache.php file, which is rebuilt each time you update your configuration options. Props @jaswsinc. Also props to @MarioKnight and @CotswoldPhoto for helping us narrow this down. See Issue #624.
  • Bug Fix: Fixed a bug where ZenCache could inadvertently corrupt the .htaccess file if it contained invalid UTF-8 characters. This has been fixed by first checking the .htaccess file for invalid UTF-8 characters via wp_check_invalid_utf8(). See Issue #633.
  • Enhancement: Improved WP Cron-related configuration and validation of custom cron schedules. See PR #197.
  • Enhancement: ZenCache now clears the cache whenever a WordPress plugin is activated or deactivated. Many WordPress plugins change content on the front-end of the site, so this enhancement ensures that an old cache file is never served to visitors. If you want to disable this automatic behavior, see this article. Props @renzms. See Issue #424.
  • Enhancement: The Auto-Cache Engine diagnostic reporting for XML Sitemap-related errors has been greatly improved. The Dashboard notice now explains exactly what error is occurring when the Auto-Cache Engine attempts to verify that the XML Sitemap exists. Props @jaswsinc. See Issue #615 and Issue #618.
  • Enhancement: Auto-Cache Engine XML Sitemap error checking is now more intelligent. When configured, the XML Sitemap URL is now checked upon every admin_init to verify that the XML Sitemap is accessible and valid. If a previous error has been fixed, the error message will disappear immediately instead of taking 15 minutes (the Auto-Cache Engine run cycle). See Issue #616.
  • Enhancement: Static CDN Filters are no longer applied by default for Logged-In Users. This was causing some confusion because Logged-In User caching is disabled by default. There is no harm in applying Static CDN Filters to all users (logged-in or not logged-in), in fact we recommend it, however we now disable this functionality by default to avoid confusion. A new option allows you to control this behavior and enable Static CDN Filters for Logged-In users; see ZenCache → Logged-In Users → Static CDN Filters Enabled for Logged-In Users & Comment Authors? Props @kristineds, @lkraav, and @isaumya. See Issue #486.
  • Enhancement: The Static CDN Filters now attempt to obey the INTELLICACHE_ALLOWED and DONOTCACHEPAGE constants so that Static CDN Filters are not applied when caching is disabled. However, due to the way Static CDN Filters are implemented this is not always reliable. If you need to programmatically disable Static CDN Filters, see this article. See Issue #628.
  • Enhancement: When activating ZenCache for the first time, a new Dashboard message now includes a helpful link to the options page to enable caching and review the options. Props @kristineds. See Issue #112.
  • Enhancement: The automatic Cache Cleanup schedule that cleans up (deletes) expired/stale cache files has been changed from once every day to once every hour. Running the cleanup hourly makes ZenCache smarter when configured in certain ways and saves disk space. Props @kristineds. See Issue #472.
  • Enhancement: The new default value for "Clear the PHP OPcache Too?" when clearing the cache manually is now disabled. Instead of having this option enabled by default, we automatically invalidate only the advanced-cache.php file in PHP's opcode cache whenever you update your configuration options, which allows ZenCache to function as expected. That was the most important reason for needing to clear the opcode cache in previous versions. Props @jaswsinc. Also props to @MarioKnight and @CotswoldPhoto for helping us narrow this down. See Issue #624.
  • Enhancement: Improved .htaccess utilities so that an exclusive lock is acquired when reading+writing to the file. This helps avoid inadvertently corrupting the .htaccess file in scenarios where another process might be reading/writing to it at the same time. See Issue #633.
  • Multisite Enhancement: The Auto-Cache Engine has a new configuration option when running on WP Multisite Networks that allows you to define whether or not the Auto-Cache Engine should look for XML Sitemaps on each of the child blogs. This now defaults to being off; i.e., by default, child blogs are no longer checked. Props @jaswsinc. See Issue #618.
  • Multisite Enhancement: The Auto-Cache Engine XML Sitemap diagnostic reporting is now always disabled for child blogs and only errors related to a primary sitemap location are displayed on the Dashboard. Props @jaswsinc. See Issue #618.
  • bbPress Compatibility: This release improves compatibility with bbPress when ZenCache Logged-In User caching is enabled. In this scenario, bbPress may generate links for Admins that contain time-sensitive _wpnonce values which could expire if cached and result in certain admin-related actions failing. ZenCache no longer caches pages that contain _wpnonce in the markup. This ensures that pages containing time-sensitive nonce values are not cached. Props @kristineds, @jaswsinc, and @clavaque. See Issue #601.
  • Akismet Compatibility: ZenCache no longer caches pages that contain akismet_comment_nonce in the markup. This ensures that a page that contains a time-sensitive nonce value does not get cached. Props @kristineds and @jaswsinc. See Issue #601.
  • Akismet Compatibility: ZenCache now automatically disables the Akismet Comment Nonce using the akismet_comment_nonce filter, which improves compatibility between Akismet and the page caching functionality provided by ZenCache. This ensures that pages do not contain time-sensitive nonce values that should not be cached. If you'd like to revert this behavior, please see this article. Props @kristineds and @jaswsinc. See Issue #601.
  • WooCommerce Compatibility: This release improves compatibility with the WooCommerce Product Stock feature. When the Product Stock changes, ZenCache will now clear the cache file for the associated Product to ensure that the stock quantity that appears on the site remains up-to-date. See Issue #597.

Props to everyone who helped with this release, including @jaswsinc, @kristineds, @renzms, @patdumond, @MarioKnight, @clavaque, @CotswoldPhoto, @lkraav, @isaumya and our 161 Beta Testers!

Upgrading to the Latest Version

ZenCache Pro users who have configured the Plugin Updater (Dashboard → ZenCache → Plugin Updater) should receive a notification to upgrade on the WordPress Dashboard. If you have not configured the Plugin Updater, you can download the latest version of ZenCache Pro by logging into your ZenCache.com account here. You'll find a download link for the latest version on your Account page. There's also a Release Archive if you need to access previous versions of ZenCache.

Please report bugs and feedback on GitHub. If you are a ZenCache Pro user and require priority support, please open a support ticket here.