Transient Cleaner
Clean expired transients from your options table. The original and best! Transient housekeeping was added to the core of WordPress after version 5.8. However, I have decided to open up this plugin to all versions to allow for manual transient cleaning. Longer term I am working on a new version of the plugin, designed specifically for all WordPress releases. Tested up to PHP 8.2 Fully complies with WordPress coding standards Compliant with the stronger WordPress VIP coding standards, as well as compatibility with their platform Community plugin – visit the Github page to get involved with the latest code development, request enhancements and report issues “Transients are a simple and standardized way of storing cached data in the WordPress database temporarily by giving it a custom name and a timeframe after which it will expire and be deleted.” Unfortunately, expired transients only get deleted when you attempt to access them. If you don’t access the transient then, even though it’s expired, WordPress will not remove it. This is a known “issue” but due to reasons, which are explained in the FAQ, this has not been adequately resolved. Why is this a problem? Transients are often used by plugins to “cache” data (my own plugins included). Because of this it means that expired data can be left and build up, resulting in a bloated database table. Meantime, this plugin is the hero that you’ve been waiting for. Simply activate the plugin, sit back and enjoy a much cleaner, smaller options table. It also adds the additional recommendation that after a database upgrade all transients will be cleared down. The Settings Screen Within Administration -> Tools -> Transients an options screen exists allowing you to tweak when you’d like cleaning to happen, including the ability to perform an ad-hoc run, and when you’d like the to be automatically scheduled. You can even request an optimization of the options table to give your system a real “pep”! Running in Lite mode A “lite” mode is available. By activating this the options screen will no longer appear and default settings will be used. The advantage? Improved performance to Admin and, especially if you’re running multi-site, no chance of anybody “tinkering” with the settings. To activate, use the following… define( 'TC_LITE', true ); This should be added to your wp-config.php file. Using hooks If you’re the type of odd person who likes to code for WordPress (really?) then I’ve added a couple of hooks so you can call our rather neat cleaning functions… housekeep_transients – this will clear down any expired transients clear_all_transients – this will remove any and all transients, expired or otherwise Acknowledgements I’d like to thank WordPress Developer Andrew Nacin for his early discussion on this. Also, I’d like to acknowledge the useful article at Everybody Staze for ensuring the proposed solution made sense, and W-Shadow.com for the cleaning code. Iconography is courtesy of the very talented Janki Rathod.
Top keywords
- transients10×2.00%
- wordpress8×1.60%
- expired6×1.20%
- options5×1.00%
- cleaning4×0.80%
- table4×0.80%
- added3×0.60%
- code3×0.60%
- data3×0.60%
- database3×0.60%
- expired transients3×0.60%
- options table3×0.60%
MSCache Varnish Purge
MSCache Varnish Purge helps WordPress administrators purge the Varnish cache for sites running behind a Varnish HTTP reverse proxy. It is developed by Managed Server S.r.l. and provides settings for configuring the Varnish connection, automatic cache invalidation when content changes, and manual purge tools available from the WordPress admin area. This plugin is useful when your WordPress site sits behind Varnish and you need cached pages to be invalidated after content is published or updated, or on demand. It requires a reachable Varnish instance whose VCL is configured to accept PURGE requests from the WordPress server (see the FAQ for a reference VCL). The settings page is available at Settings → MSCache Varnish Purge. On WordPress Multisite, shared connection settings are configured at Network Admin → Settings → MSCache Network, while each site keeps its own purge options. Key Features Asynchronous raw socket PURGE — sends PURGE requests via a direct TCP socket (fsockopen) without waiting for the Varnish response, so the purge request does not block the WordPress request. Automatic purge on content changes — when a post, page, or custom post type is published, updated, trashed, or deleted, the plugin automatically purges the affected URLs including the post itself, home page, categories, tags, author archives, and date archives. Full cache purge — supports multiple methods for purging the entire cache: PURGE wildcard, PURGE custom path, or BAN with configurable header. Additional URLs — define a list of extra paths to purge alongside content changes or on demand. Exclusion patterns — define glob or regex patterns for URLs that should be excluded from caching. Matching requests receive the ms-cache: excluded HTTP header, which can be used by Varnish to skip caching. Admin bar integration — quick-access purge buttons in the WordPress admin bar: Purge All, Purge Home, Purge Current Page. Bulk and row actions — purge cache for selected posts/pages directly from the list table. Debug logging — optional logging of all purge operations to a protected log directory. PHP 7 and PHP 8 compatible — works on PHP 7.0 through PHP 8.x without deprecation warnings. How It Works The plugin opens a raw TCP socket to your Varnish server and sends an HTTP PURGE request with the appropriate Host header. The socket is closed immediately after writing the request — the plugin does not wait for Varnish to respond. This “fire and forget” approach is designed to avoid blocking the WordPress request while the purge is processed. External Services This plugin optionally connects to the following external services when configured by the administrator: Cloudflare API — When the Cloudflare integration is enabled, the plugin sends cache purge requests to the Cloudflare API v4 (https://api.cloudflare.com/client/v4/) to synchronize Varnish cache invalidation with Cloudflare CDN edge cache. This requires a Cloudflare account, a Zone ID, and an API Token with “Zone.Cache Purge” permission. No personal data or visitor information is transmitted — only URL paths and authentication credentials are sent. Cloudflare Terms of Service Cloudflare Privacy Policy Varnish Cache — The plugin opens raw TCP socket connections to a Varnish server at a user-configured IP address and port (default: 127.0.0.1:80). This is typically a localhost connection to infrastructure managed by the site administrator. No external third-party service is contacted for this functionality. Data Handling & Logging When debug mode is enabled by the administrator, the plugin logs technical data (URL paths, timestamps, socket connection status, purge results) to files in wp-content/uploads/mscache-logs/. Log files are protected with .htaccess rules, obfuscated filenames, and an index.php guard. No personally identifiable information (PII) or visitor data is collected, stored, or transmitted. Purge statistics (success/failure counts, recent activity) are stored in the WordPress options table and are visible only to administrators. Configuration General Settings Enable Plugin — master switch for all purge functionality. Varnish IP — the IP address of your Varnish server (default: 127.0.0.1). Varnish Port — the port Varnish listens on (default: 80). Custom Host Header — override the Host header sent with purge requests. Leave empty to use your WordPress site URL. Socket Timeout — connection timeout in seconds (default: 5). Automatic Purge Choose which content changes trigger automatic cache purge: Posts, Pages, Custom Post Types Home page Category, tag, author, and date archives Full Cache Purge Three methods are available: PURGE /.* — sends a PURGE request with a wildcard path. Requires Varnish VCL to handle regex/wildcard PURGE. PURGE custom path — sends PURGE to a specific path (e.g., /purge-all). Useful when your VCL maps a special path to a full ban. BAN with custom header — sends a BAN request with a configurable header name and value. The most flexible option but requires matching VCL configuration. Important: The actual behavior of a full purge depends entirely on your Varnish VCL configuration. The plugin only sends the request — it is your VCL that decides what gets purged. Additional URLs Enter one URL per line (absolute or relative paths). These URLs can be purged: Automatically alongside post/page saves (if the option is enabled) Manually via the “Purge Additional URLs” button Exclusions Define patterns (one per line) for URLs that should be excluded from caching. Two matching modes: Glob (default) — supports * (any characters) and ? (single character). Example: /wp-admin/*, /cart*, *.xml Regex (advanced) — full regular expression support. Use with caution. When a frontend request matches an exclusion pattern, the plugin sends the HTTP header ms-cache: excluded. Your Varnish VCL can check for this header and bypass caching accordingly. Lines starting with # are treated as comments and ignored. Matching is performed on the request path only, ignoring the query string. Disclaimer This plugin is provided “as is” under the terms of the GNU General Public License v2 or later. MANAGED SERVER S.R.L. does not warrant that the plugin will function correctly on hosting environments, servers, or Varnish configurations not directly managed by the company. The plugin has been tested and validated exclusively on the Managed Server hosting infrastructure. Use on third-party environments is at the user’s sole risk and responsibility. In no event shall MANAGED SERVER S.R.L. be liable for any direct, indirect, incidental, or consequential damages arising from the use of this plugin outside of the Managed Server infrastructure.