{"id":388351,"date":"2026-10-21T16:26:22","date_gmt":"2026-10-21T16:26:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/caching-out\/"},"modified":"2026-10-26T14:59:38","modified_gmt":"2026-10-26T14:59:38","slug":"cachingout","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cachingout\/","author":23578054,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.23.0","stable_tag":"1.23.0","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Caching Out","header_author":"Caching Out","header_description":"Page caching, browser caching, compression and lazy loading - on the moment you activate. Never cached for logged-in visitors or carts.","assets_banners_color":"777e7c","last_updated":"2026-10-26 14:59:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/cachingout.com\/docs\/","header_author_uri":"https:\/\/cachingout.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":179,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.21.17":{"tag":"1.21.17","author":"cachingout","date":"2026-10-21 16:25:46","revision":3758710},"1.22.0":{"tag":"1.22.0","author":"cachingout","date":"2026-10-24 08:51:15","revision":3762959},"1.23.0":{"tag":"1.23.0","author":"cachingout","date":"2026-10-26 14:59:38","revision":3766748}},"upgrade_notice":{"1.23.0":"<p>Fixes WebP images (Caching Out Pro) being missed for most visitors when a\npage was first cached by Chrome, Edge or Firefox, and stops caching every\npage twice by browser type when no image variant is served. The page cache\nis emptied once on update. Update Caching Out Pro to 1.23.0 for AVIF.<\/p>","1.22.0":"<p>The settings screens have a new look (Bootstrap is gone; about 440 KB less\nper plugin screen). No setting changes. If you use Caching Out Pro, update\nit to 1.22.0 as well: Pro 1.22.0 needs Caching Out 1.22.0 and loads nothing\nuntil both are updated.<\/p>","1.21.17":"<p>Visitors arriving from social and ad links (fbclid, gclid, utm_ and the\nlike) are now served from the page cache. If you had added those names to\nIgnored query parameters yourself, your list is kept; Restore default\nparameters on the Cache tab adds the rest. Update Caching Out Pro to\n1.21.17 too.<\/p>","1.21.13":"<p>Brings the code in line with the WordPress.org plugin guidelines. No setting\nchanges. If you use Caching Out Pro, update it to 1.21.13 as well: two of its\ndatabase operations moved out of this plugin into Pro.<\/p>","1.21.9":"<p>Fixes an error when saving a WooCommerce product, and keeps file optimization\noff the WooCommerce cart, checkout and account pages. A snippet you added to\ndo that can be removed. With Caching Out Pro, upgrade this plugin first.<\/p>","1.21.8":"<p>The Database tab now unlocks each Run button only after you have previewed\nthat row. If you use Caching Out Pro, upgrade this plugin first: Pro 1.21.8\nrequires it.<\/p>","1.21.7":"<p>Fixes automatic image dimensions resizing images your theme scales with CSS,\nsuch as a logo in a header bar, and makes the LazyLoad exclusions cover those\nattributes too. If you switched Add Missing Width\/Height off to work around\nthis, you can safely switch it back on.<\/p>","1.21.0":"<p>Caching Out is now a free plugin on WordPress.org, with the features listed\nabove switched on as they were. Every setting keeps its value and nothing is\nswitched on or off by the upgrade.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3758710,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3758710,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3758710,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3758710,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.21.17","1.22.0","1.23.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3762959,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3762959,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3762959,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3762959,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3762959,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The Cache tab: page caching on, a lifespan in hours, an optional separate mobile cache and the filesystem check.","2":"The Database tab: every cleanup shows how many rows it will remove before Run unlocks.","3":"Insights with the Page Audit, which reads your pages and names what to fix without an API key.","4":"The Filesystem Check: every file the plugin needs, what passed, what failed, and the fix.","5":"The Setup Wizard."}},"plugin_section":[],"plugin_tags":[146,1466,1736,3853,247],"plugin_category":[52,54],"plugin_contributors":[287856],"plugin_business_model":[],"class_list":["post-388351","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-lazyload","plugin_tags-minify","plugin_tags-page-cache","plugin_tags-performance","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-cachingout","plugin_committers-cachingout"],"banners":{"banner":"https:\/\/ps.w.org\/cachingout\/assets\/banner-772x250.png?rev=3758710","banner_2x":"https:\/\/ps.w.org\/cachingout\/assets\/banner-1544x500.png?rev=3758710","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cachingout\/assets\/icon-128x128.png?rev=3758710","icon_2x":"https:\/\/ps.w.org\/cachingout\/assets\/icon-256x256.png?rev=3758710","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cachingout\/assets\/screenshot-1.png?rev=3762959","caption":"The Cache tab: page caching on, a lifespan in hours, an optional separate mobile cache and the filesystem check."},{"src":"https:\/\/ps.w.org\/cachingout\/assets\/screenshot-2.png?rev=3762959","caption":"The Database tab: every cleanup shows how many rows it will remove before Run unlocks."},{"src":"https:\/\/ps.w.org\/cachingout\/assets\/screenshot-3.png?rev=3762959","caption":"Insights with the Page Audit, which reads your pages and names what to fix without an API key."},{"src":"https:\/\/ps.w.org\/cachingout\/assets\/screenshot-4.png?rev=3762959","caption":"The Filesystem Check: every file the plugin needs, what passed, what failed, and the fix."},{"src":"https:\/\/ps.w.org\/cachingout\/assets\/screenshot-5.png?rev=3762959","caption":"The Setup Wizard."}],"raw_content":"<!--section=description-->\n<p>Caching Out keeps a ready-made copy of each page and serves it before\nWordPress loads, writes browser caching and compression rules into your server\nconfiguration, loads images, iframes and video as they are needed rather than\nall at once, and can minify your CSS and JavaScript. It rebuilds the copies\nwhen your content changes. It is designed to improve LCP, INP and CLS.<\/p>\n\n<p>Performance results vary depending on hosting, theme, plugins and traffic.<\/p>\n\n<h4>We check before we touch anything<\/h4>\n\n<p>Page caching needs one file, wp-content\/advanced-cache.php, and browser caching\nneeds a block of rules in your server configuration. Either of them may already\nbelong to another plugin.<\/p>\n\n<p>Caching Out records a fingerprint of the drop-in file it writes and compares it\nbefore every write, overwrite or delete. If the file on disk is not the one it\nwrote, it leaves that file alone, does not switch page caching on, and shows a\nnotice naming the plugin the file belongs to. The rest of the plugin keeps\nworking.<\/p>\n\n<p>The same rule covers your .htaccess. A marker block belonging to another plugin\nis never written into and never removed. Before Caching Out writes its own\nblock it checks the result, then replaces the file in one step; if the file\ncannot be written, nothing is written at all, so a half-written server\nconfiguration is never left behind, and no copy of your .htaccess or\nwp-config.php is ever left on disk. Deactivation never edits .htaccess or\nwp-config.php.<\/p>\n\n<p>Caching Out never reads, writes or removes object-cache.php.<\/p>\n\n<h4>What is on the moment you activate<\/h4>\n\n<ul>\n<li>Page caching, with the drop-in installed and WP_CACHE set<\/li>\n<li>Purging when your content changes<\/li>\n<li>Browser caching: Expires headers, GZIP and Brotli, written through the\nchecked writer described above<\/li>\n<li>Lazy loading for images, iframes and video, and missing width and height\nattributes added<\/li>\n<li>Hero-image priority for the image most likely to be the largest one on\nscreen<\/li>\n<li>The Filesystem Check notice and the Page Audit of your key pages<\/li>\n<li>Your own exclusions: URLs, cookies and user agents that must never be\ncached, on the Cache tab<\/li>\n<\/ul>\n\n<h4>What stays off until you choose it<\/h4>\n\n<p>Anything that can change how a page looks is off until you switch it on:<\/p>\n\n<ul>\n<li>Minify CSS<\/li>\n<li>Minify JavaScript<\/li>\n<li>Defer JavaScript<\/li>\n<li>Lazy loading of CSS background images<\/li>\n<li>Database cleanup, which is manual and shows you the row counts first<\/li>\n<\/ul>\n\n<h4>The safety layer<\/h4>\n\n<p>These rules are fixed. They have no settings, they cannot be switched off, and\nthey are the same in the free plugin and in Caching Out Pro:<\/p>\n\n<ul>\n<li>A logged-in visitor is never served a cached page<\/li>\n<li>A request carrying a session, authentication or cart cookie - including\nPHPSESSID - is never served from the cache and is never cached<\/li>\n<li>A response that sets a session or authentication cookie is never stored<\/li>\n<li>Cart, checkout and account pages, in WooCommerce and Easy Digital Downloads,\nare excluded with no configuration<\/li>\n<li>wp-admin and wp-login.php are never cached<\/li>\n<li>Only ordinary page views (GET requests) that returned 200 are cached<\/li>\n<li>Cache files are written to a temporary file and renamed into place, so a\nvisitor never receives a half-written page<\/li>\n<li>The drop-in ownership guard described above<\/li>\n<li>define( 'CACHINGOUT_DISABLE_CACHE', true ); in wp-config.php disables all\ncache reading and writing, in every version<\/li>\n<li>Deleting the plugin removes its options, its scheduled tasks, its cache\ndirectory, the drop-in, WP_CACHE and its .htaccess block<\/li>\n<\/ul>\n\n<h4>What the free plugin does<\/h4>\n\n<ul>\n<li><strong>Page caching<\/strong> served from the drop-in, before WordPress and its plugins\nload. Cache lifespan in hours, optional separate cache files for mobile.<\/li>\n<li><strong>Purging<\/strong> when a post or page is saved, trashed or restored, when a term,\nmenu, theme, widget or customizer setting changes, when a comment is\napproved, and from the Purge button in the admin bar. Archives and the pages\nthat list a changed post are purged with it.<\/li>\n<li><strong>Browser caching<\/strong>: Expires headers, GZIP and Brotli for Apache through the\n.htaccess writer. On NGINX the documentation carries the equivalent snippet\nto paste into your server configuration.<\/li>\n<li><strong>Lazy loading<\/strong> for images, iframes and self-hosted video, with an\nexclusion list, an above-the-fold allowance, missing width and height\nattributes added to reduce layout shift, and optional lazy loading of CSS\nbackground images.<\/li>\n<li><strong>Hero-image priority<\/strong>: the image most likely to be the largest one on\nscreen is marked high priority and preloaded, with an exclusion list.<\/li>\n<li><strong>Minify CSS and JavaScript, and defer JavaScript<\/strong>, each off until you\nswitch it on, each with its own per-file inclusion and exclusion controls.\nMinified copies are written to disk; the original tag keeps its attributes\nand only the URL changes. Already-minified files are left alone.<\/li>\n<li><strong>Database cleanup by hand<\/strong>: revisions, auto-drafts, trashed posts, spam and\ntrashed comments, and transients, with the number of rows shown before\nanything is deleted. Nothing is scheduled and nothing runs unattended.<\/li>\n<li><strong>Heartbeat control and DNS prefetch<\/strong> for the domains you list.<\/li>\n<li><strong>Compatibility handling<\/strong> for WooCommerce, Easy Digital Downloads, WPML,\nPolylang and page builders, which register their exclusions into the one\nplace that decides whether a page may be cached.<\/li>\n<\/ul>\n\n<h4>Page Audit and Filesystem Check<\/h4>\n\n<p>Both are included in full, and neither needs an API key.<\/p>\n\n<p>The <strong>Page Audit<\/strong> reads your tracked pages the way a visitor would - over a\nloopback request to your own site - and lists what it found. Where a plugin\nsetting answers the finding, there is a button that changes that setting. Where\nyour theme or your host has to change something, it says so in plain words.<\/p>\n\n<p>The <strong>Filesystem Check<\/strong> verifies every file the plugin needs: the drop-in, the\nWP_CACHE constant, the cache directory, the settings snapshot the drop-in reads\nand the scheduled tasks. Each row says what state it is in and what to do about\nit.<\/p>\n\n<h4>Caching Out Pro<\/h4>\n\n<p>The free plugin above is complete on its own and stays free. Caching Out Pro is\na separate add-on, installed alongside it, that adds:<\/p>\n\n<ul>\n<li>Optimize CSS delivery, combine CSS and JS, delay JS, Google Fonts (combine\nand self-host), WebP and AVIF serving where copies already exist, and\nYouTube click-to-load<\/li>\n<li>Unused CSS\/JS: stops named plugin files loading on pages that do not need\nthem, with a scan, a preview, a dependency check, a never-unload list,\nsuggested rules from a built-in catalogue and an optional weekly scan<\/li>\n<li>Activity: a record of every change the plugin makes, with one-click revert<\/li>\n<li>Performance Insights: a PageSpeed dial, a baseline, re-tests and history<\/li>\n<li>Cache preloading, a step you switch on<\/li>\n<li>Database: scheduled cleanup, orphaned metadata and table optimisation<\/li>\n<li>CDN rewriting, and purge add-ons for Cloudflare, Varnish and Sucuri<\/li>\n<li>WP-CLI commands, settings export and import, and Multisite Network Admin<\/li>\n<li>Email support from the team who built it - plus an assistant that already\nknows your setup. It knows which plugins you run, which settings you have on\nand what the Page Audit found, so you never have to explain your site before\nasking a question. Every answer points at the documentation or the rule it\ncame from.<\/li>\n<\/ul>\n\n<p>The assistant is scoped to Caching Out and your site's configuration: 50\nquestions a day and 300 a month per licence. It is not a general-purpose\nchatbot; answers are AI-generated and can be wrong, so check anything\nconsequential against the linked source.<\/p>\n\n<p>Every feature in every paid plan; the paid plans differ in the number of sites\nand the length of support, never in what the plugin does. In both editions,\nanything that can change how a page looks stays off until you switch it on.<\/p>\n\n<p>Details: https:\/\/cachingout.com\/pricing\/<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The free plugin does not need a licence, never contacts our servers, and makes\nno outbound request of its own.<\/p>\n\n<p>The one exception is the Page Audit and the Filesystem Check, which fetch pages\nfrom <strong>your own site<\/strong> over a loopback request when you run them or when the\ntracked-page schedule runs. Nothing is sent anywhere else and nothing leaves\nyour server.<\/p>\n\n<p>The free plugin sends no usage data. Telemetry belongs to Caching Out Pro,\nwhere it is opt-in with the box unticked, sends aggregate figures only - never\npage content and never personal data - and is disabled outright by\ndefine( 'CACHINGOUT_DISABLE_TELEMETRY', true );.<\/p>\n\n<p>The free plugin sets no cookies of its own. It reads cookie names on the\nrequest, because it must - a visitor carrying a session, authentication or cart\ncookie is never served a cached page - but no cookie value is stored, logged or\nsent anywhere.<\/p>\n\n<h4>Third-party libraries<\/h4>\n\n<p>The admin screens use Bootstrap 5.3.8 (https:\/\/github.com\/twbs\/bootstrap) and\nBootstrap Icons 1.13.2 (https:\/\/github.com\/twbs\/icons), both under the MIT\nlicence, shipped as the unmodified minified files from their upstream\nreleases. The human-readable source is in those repositories at the matching\nversion tag. Minify CSS and Minify JavaScript use matthiasmullie\/minify\n(https:\/\/github.com\/matthiasmullie\/minify, MIT), shipped unminified in\nvendor\/. assets\/THIRD-PARTY-LICENSES.txt in the plugin folder names each\nbundled file, its version and its licence.<\/p>\n\n<p>The plugin's own three front-end scripts (the lazy loading helpers) are printed\ninline from assets\/js\/*.min.js; their readable source is in assets\/js\/src\/.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/cachingout<\/code>, or install it from\nthe Plugins screen in WordPress.<\/li>\n<li>Activate it. Page caching, browser caching, compression and lazy loading are\non from that moment; nothing else has to be configured.<\/li>\n<li>Open <strong>Caching Out<\/strong> in the admin sidebar to change anything, and read the\nFilesystem Check if a notice appears.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20licence%20key%3F\"><h3>Do I need a licence key?<\/h3><\/dt>\n<dd><p>No. The free plugin is a complete product. It never asks for a key and never\ncontacts our servers.<\/p><\/dd>\n<dt id=\"how%20do%20i%20disable%20caching%20quickly%3F\"><h3>How do I disable caching quickly?<\/h3><\/dt>\n<dd><p>Add <code>define( 'CACHINGOUT_DISABLE_CACHE', true );<\/code> to <code>wp-config.php<\/code>. This\ndisables all cache reading and writing in every version, and it is the\ndocumented way out of a bad release.<\/p><\/dd>\n<dt id=\"are%20logged-in%20users%20served%20cached%20pages%3F\"><h3>Are logged-in users served cached pages?<\/h3><\/dt>\n<dd><p>No. Logged-in visitors always bypass the page cache; only anonymous visitors\nare served a cached page. This is a fixed rule with no setting, so private\ncontent is never served to the wrong person.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20another%20caching%20plugin%20is%20already%20installed%3F\"><h3>What happens if another caching plugin is already installed?<\/h3><\/dt>\n<dd><p>Caching Out checks whether it owns <code>wp-content\/advanced-cache.php<\/code> before it\nwrites anything. If another plugin owns it, page caching stays off, the file is\nleft exactly as it is, and a notice names the plugin the file belongs to. The\nsame applies to a marker block in <code>.htaccess<\/code>. Every other part of the plugin\nkeeps working.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Cart, checkout and account pages are excluded on activation with no\nconfiguration, and any visitor carrying a cart or session cookie bypasses the\ncache entirely. The equivalent Easy Digital Downloads pages are excluded the\nsame way.<\/p><\/dd>\n<dt id=\"will%20it%20change%20how%20my%20site%20looks%3F\"><h3>Will it change how my site looks?<\/h3><\/dt>\n<dd><p>Not on activation. Page caching, browser caching, compression and lazy loading\ndo not change your markup's appearance. Everything that can - minification,\ndeferring JavaScript, lazy loading of CSS background images - is off until you\nswitch it on.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20nginx%3F\"><h3>Does it work on NGINX?<\/h3><\/dt>\n<dd><p>Page caching does, unchanged. The browser caching and compression rules are\nwritten into <code>.htaccess<\/code>, which is Apache and LiteSpeed only; on NGINX the\ndocumentation carries the equivalent snippet to paste into your server\nconfiguration by hand.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20it%3F\"><h3>What happens when I delete it?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes its options, its scheduled tasks, its cache\ndirectory, the drop-in, the <code>WP_CACHE<\/code> constant and its <code>.htaccess<\/code> block.\nThere is no separate clean-up step to run first. Deactivating removes the\ndrop-in and the scheduled tasks only; it never edits <code>.htaccess<\/code> or\n    wp-config.php. If another page-cache plugin is active, save its settings\nonce after deleting Caching Out so it adds <code>WP_CACHE<\/code> back. Step by step,\nincluding what to check by hand: https:\/\/cachingout.com\/docs\/getting-started\/<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20this%20plugin%20and%20caching%20out%20pro%3F\"><h3>What is the difference between this plugin and Caching Out Pro?<\/h3><\/dt>\n<dd><p>This plugin is free, permanent and complete on its own. Pro is a separate\nadd-on you install alongside it, listed in the description above. Removing Pro\nleaves this plugin running exactly as before.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20support%3F\"><h3>Where do I get support?<\/h3><\/dt>\n<dd><p>Community support for the free plugin is in the WordPress.org support forum for\nthis plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.23.0<\/h4>\n\n<ul>\n<li>Fixed: the cached copy of a page no longer depends on which browser\nvisited it first. Before, a page first visited by Chrome, Edge or Firefox\nwas cached as that browser's image variant, so with Caching Out Pro most\nWebP-capable visitors received no WebP images. A page is now always\nwritten as the plain copy first, and image variants are made from it.<\/li>\n<li>Changed: without Caching Out Pro serving WebP or AVIF, pages are no longer\ncached twice by browser type (once for browsers that accept WebP and once\nfor the rest). Each page has one cached copy, and the response carries no\n\"Vary: Accept\" header. The cache is emptied once on update.<\/li>\n<li>New (for Caching Out Pro 1.23.0): an AVIF variant beside the WebP one.\nWith CACHINGOUT_DEBUG on, the X-CachingOut-Image-Variant header names the\nvariant a response was served from.<\/li>\n<li>New: \"Removing Caching Out completely\" in the getting-started guide.\nDeleting the plugin from the Plugins screen removes everything it added;\nthere is no separate clean-up step.<\/li>\n<li>If you use Caching Out Pro, update it to 1.23.0 as well to get AVIF and\nthe new WebP behaviour. Pro 1.22.0 keeps working with this version.<\/li>\n<\/ul>\n\n<h4>1.22.0<\/h4>\n\n<ul>\n<li>Changed: the plugin's settings screens have a new look, built in-house on\nthe Caching Out brand colours. Bootstrap, Bootstrap Icons and the\nBootstrap JavaScript bundle are no longer shipped or loaded in wp-admin\n(about 440 KB less on every plugin screen; nothing loads from a\nthird-party host). Icons are inline SVG. Every setting, tab and button\nis where it was; no setting changes value on update.<\/li>\n<li>New: the Cache tab opens with a status strip: whether page caching is on,\nhow many pages are cached right now, whether the advanced-cache.php\ndrop-in is ours and in place, and the cache lifespan.<\/li>\n<li>Changed: the settings screens meet WCAG 2.1 AA (contrast, visible focus\nrings, 44 px touch targets on icon-only controls) and respect\nprefers-reduced-motion. Phone widths down to 320 px scroll in one\ndirection only.<\/li>\n<li>Changed: the activation report notice and the setup wizard use the same\nlook; the \"Save Changes\" buttons are the plugin's own.<\/li>\n<li>New: saving a tab now shows a \"Settings saved.\" confirmation at the top\nof the tab (before, the page simply reloaded).<\/li>\n<li>If you use Caching Out Pro, update it to 1.22.0 as well: Pro 1.22.0 draws\nits screens with this version's stylesheet and needs Caching Out 1.22.0\nor later (it shows one notice and loads nothing until the free plugin is\nupdated).<\/li>\n<\/ul>\n\n<h4>1.21.17<\/h4>\n\n<ul>\n<li>Fixed: visitors arriving from Facebook, Instagram, Google Ads, TikTok or\na campaign link were never served from the page cache, because the URL\ncarried a tracking parameter (fbclid, igsh, gclid, utm_...) and the\n\"Ignored query parameters\" list was empty by default. The list now ships\nprefilled with the parameters the browser-side pixels read and the\nserver never does: fbclid, igshid, igsh, gclid, gbraid, wbraid, dclid,\nttclid, msclkid, twclid, yclid, li_fat_id, mc_cid, mc_eid, <em>ga, _gl,\n_hsenc, _hsmi, utm<\/em>*. A request whose parameters are all on the list is\nserved the plain page's cached copy and writes no file of its own; the\nbrowser URL is untouched. One parameter off the list still bypasses the\nwhole request. On update, a site whose list was empty gets the defaults;\na site that had filled the list keeps it.<\/li>\n<li>New: a trailing * in the list matches a name prefix (utm_*); utm without\nthe star matches only utm. The Cache tab shows the list, editable, with\na \"Restore default parameters\" link that adds back removed defaults and\nkeeps your own names.<\/li>\n<li>New: the cachingout_ignored_query_strings filter lets another plugin add\nthe parameter names it puts on its own links. The names reach the\nadvanced-cache.php drop-in through the runtime snapshot, which is now\nalso refreshed when any plugin is activated or deactivated.<\/li>\n<li>If you use Caching Out Pro, update it to 1.21.17 as well.<\/li>\n<\/ul>\n\n<h4>1.21.16<\/h4>\n\n<ul>\n<li>New: custom exclusions are part of the free plugin. Keep any URL, cookie\nor user agent out of the cache from the Cache tab (Never Cache). The\nbuilt-in safety exclusions are unchanged and still apply first.<\/li>\n<li>Changed: one front-end output buffer instead of three. Lazy loading and\nhero-image priority run inside the optimisation pipeline's buffer, which\nthe plugin closes itself; on WordPress 6.9 and later it uses WordPress's\nown template output buffer. The advanced-cache.php drop-in closes its\nbuffer the same way (the drop-in is refreshed on update).<\/li>\n<li>Changed: wp-config.php and .htaccess are updated by replacing the file in\none step. No backup copy of either file is written to disk any more; if a\nwrite fails the file is left as it was and the notice says what to add or\nremove by hand.<\/li>\n<li>Changed: the drop-in finds the plugin from the directory recorded at\nactivation, so a renamed plugin folder or a custom plugins directory\nworks. The companion style for injected image dimensions is enqueued\nrather than written into the page.<\/li>\n<li>Changed: Bootstrap 5.3.8 and Bootstrap Icons 1.13.2 on the admin screens.<\/li>\n<li>Changed: the partner-code disclosure sentence on the Pro tab can be\nchanged through the <code>cachingout_partner_code_disclosure<\/code> filter and is\ntranslatable. The drop-in locates the plugin only from the directory\nrecorded at activation (or WP_PLUGIN_DIR when wp-config.php defines\nit); it no longer guesses wp-content\/plugins\/cachingout.<\/li>\n<li>Also carries the Partner Engine integration hooks (DONOTCACHEPAGE is\nhonoured, the cachingout_derived_never_cache_prefixes and\ncachingout_response_is_cacheable filters).<\/li>\n<li>If you use Caching Out Pro, update it to 1.21.16 as well.<\/li>\n<\/ul>\n\n<h4>1.21.15<\/h4>\n\n<ul>\n<li>No changes to the free plugin; the version moves with Caching Out Pro\n1.21.15 so the two are released as a pair. (The 1.21.14 package submitted\nto WordPress.org carried one header correction, the plugin's own page as\nits Plugin URI; it is in this version too.)<\/li>\n<\/ul>\n\n<h4>1.21.14<\/h4>\n\n<ul>\n<li>No changes to the free plugin; the version moves with Caching Out Pro\n1.21.14 so the two are released as a pair.<\/li>\n<\/ul>\n\n<h4>1.21.13<\/h4>\n\n<ul>\n<li>Changed: the code was brought in line with the WordPress.org plugin\nguidelines. The database cleanup queries use WordPress's standard prepared\nform, temporary and backup files are removed with WordPress's own functions,\nand the two small scripts the admin screens printed inline are loaded\nthrough the script API.<\/li>\n<li>Changed: table optimisation and orphaned-metadata cleanup, which belong to\nCaching Out Pro, are no longer part of this plugin's code; the add-on\ncarries them. The seven cleanup operations of this plugin are unchanged.<\/li>\n<li>Changed: the bundled third-party libraries are listed in\nassets\/THIRD-PARTY-LICENSES.txt.<\/li>\n<li>No setting changes, and no change to what is cached or when. If you use\nCaching Out Pro, update it to 1.21.13 as well.<\/li>\n<\/ul>\n\n<h4>1.21.12<\/h4>\n\n<ul>\n<li>No change to this plugin. Released together with Caching Out Pro 1.21.12,\nwhich works with this version and with 1.21.10 or later.<\/li>\n<\/ul>\n\n<h4>1.21.11<\/h4>\n\n<ul>\n<li>No change to this plugin. Released together with Caching Out Pro 1.21.11,\nwhich works with this version and with 1.21.10.<\/li>\n<\/ul>\n\n<h4>1.21.10<\/h4>\n\n<ul>\n<li>Fixed: the \"See Pro on cachingout.com\" link on the Pro tab, and the\ndetails link in this readme, pointed at a page that does not exist. They\ngo to https:\/\/cachingout.com\/pricing\/.<\/li>\n<li>No change to caching or optimization. Caching Out Pro 1.21.10 requires\nthis version.<\/li>\n<\/ul>\n\n<h4>1.21.9<\/h4>\n\n<ul>\n<li>Fixed: with WooCommerce active, saving a product whose stock changed - and\nan order reducing stock - stopped with a PHP error (\"purge_post():\nArgument #1 must be of type int\"), which could leave a half-saved product.\nThe plugin listened to two WooCommerce stock events that pass the product\nitself, not its ID.<\/li>\n<li>Fixed: Minify CSS, Minify JS and Defer JS (and every Caching Out Pro file\noptimization) no longer run on the WooCommerce cart, checkout and account\npages, or on any page holding the cart or checkout block. The page cache\nalready left those pages alone; file optimization did not, and the block\ncheckout could fail to load. With debugging on, those pages answer\n\"X-CachingOut-Optimization: skipped; woocommerce-checkout\" (or -cart,\n-account).<\/li>\n<li>New for developers: the <code>cachingout_skip_optimization<\/code> filter. Return a\nshort reason to keep file optimization off a request; return an empty\nstring to leave it on.<\/li>\n<li>Caching Out Pro 1.21.9 requires this version.<\/li>\n<\/ul>\n\n<h4>1.21.8<\/h4>\n\n<ul>\n<li>Changed: on the Database tab, each row's Run button is locked until that\nrow has been previewed and shows how many rows it will remove, and locks\nagain after a run until the next preview. \"Run All Previewed\" now runs\nonly the rows you have previewed. Nothing is deleted without the count\nbeing shown first, which was always the intent.<\/li>\n<li>Fixed: the orphaned-metadata cleanup (a Caching Out Pro operation that\nlives in this plugin's cleanup engine) now also removes term metadata\nwhose term no longer exists.<\/li>\n<li>Changed: the settings reference and the knowledge base now state that\nMinify CSS and Minify JS do not consult SCRIPT_DEBUG - the switch alone\ndecides. No behaviour change.<\/li>\n<li>Changed: the compatibility matrix in the documentation is rewritten for\n1.21.8 and WordPress 7.1.<\/li>\n<li>Tests: the deactivation tests now exercise the real deactivator and its\nreal contract (the drop-in and our cron events are removed; WP_CACHE and\nthe .htaccess block are left for uninstall).<\/li>\n<li>Caching Out Pro 1.21.8 requires this version.<\/li>\n<\/ul>\n\n<h4>1.21.7<\/h4>\n\n<ul>\n<li>Fixed: automatic image dimensions could resize an image the theme sizes\nwith CSS, most visibly a logo scaled down to fit a header bar. The\nplugin now pairs every width\/height it adds with a \"height: auto\" rule\nin a CSS cascade layer, which cannot override your theme but does stop\nan added height from becoming the image's real height. Reserved space,\nand so the protection against layout shift, is unchanged.<\/li>\n<li>Fixed: excluding an image from LazyLoad (the no-lazy or skip-lazy class,\ndata-no-lazy, or the Media exclusion list) now also stops width and\nheight being added to it. Previously the exclusion was applied after the\nattributes had already been injected.<\/li>\n<li>Changed: dimensions are read from the media library record for the exact\nfile in the tag, falling back to measuring the file only for images\nWordPress does not know. An image outside the media library that offers\nseveral files through srcset is left alone rather than guessed at.<\/li>\n<li>New: every image the plugin measures is marked data-cachingout-dim=\"1\"\nin the page source, so you can see what was changed.<\/li>\n<li>Fixed: changing an image now clears the page cache. Optimisation plugins\nsuch as Imagify, ShortPixel, Smush and EWWW re-encode files without\nsaving a post, so cached pages kept describing the previous file. A bulk\nrun clears the cache once per batch, not once per image.<\/li>\n<li>Caching Out Pro 1.21.7 requires this version.<\/li>\n<\/ul>\n\n<h4>1.21.6<\/h4>\n\n<ul>\n<li>Changed: the Caching Out mark replaces the rocket icon in the plugin\nheader, the admin menu and the admin bar.<\/li>\n<li>New: a Documentation button in the header and a \"Documentation: \"\nlink at the top of every settings tab, pointing at the online guides.<\/li>\n<li>Fixed: two \"Constant already defined\" PHP warnings were logged on every\npage load when the page-cache drop-in had already defined them.<\/li>\n<li>Fixed: Defer JavaScript exclusions now also match a script's id, so a\nscript Minify JS has renamed can still be excluded by name.<\/li>\n<li>Caching Out Pro 1.21.6 requires this version.<\/li>\n<\/ul>\n\n<h4>1.21.5<\/h4>\n\n<ul>\n<li>Changed: the version moves with the Pro add-on's 1.21.5 so the two are\nreleased as a pair. The free plugin's behaviour is unchanged; it carries\nthe small hooks the add-on's new features hang on (two gating-table\nrows, one pipeline position, a Page Audit registration filter), and the\ndebug timing header is now formatted the same way in every server\nlocale. Caching Out Pro 1.21.5 requires this version.<\/li>\n<\/ul>\n\n<h4>1.21.4<\/h4>\n\n<ul>\n<li>No change to the free plugin's behaviour; the version moves with the Pro\nadd-on's 1.21.4 (a fix in Optimize CSS delivery there) so the two are\nreleased as a pair.<\/li>\n<\/ul>\n\n<h4>1.21.3<\/h4>\n\n<ul>\n<li>Fixed: with Minify CSS on, Optimize CSS delivery (a Pro feature) no longer\nloses track of which stylesheet is the theme's, a slider's, or one on your\nExcluded CSS list. Minified copies carry a hashed name; the plugin now\nremembers where each copy came from, so those stylesheets stay\nrender-blocking as intended. Before, switching both features on could\nleave the header or menu unstyled until the deferred stylesheet arrived.<\/li>\n<li>Fixed: the Unused CSS\/JS suggestions and the Page Audit no longer treat a\nWooCommerce selector inside an inline style block, or the bare word\n\"woocommerce\", as a sign that a page uses WooCommerce. Sites where a\ntheme styled shop elements from the customizer saw \"Nothing to suggest\"\non every page. WooCommerce's front-end scripts and the Testimonial\nSlider and Showcase plugin are now catalogued too.<\/li>\n<\/ul>\n\n<h4>1.21.2<\/h4>\n\n<ul>\n<li>Fixed: on a multilingual site whose languages live at different URLs (a\nPolylang directory, subdomain or domain setup; a WPML directory or domain\nsetup), the language cookie those plugins set no longer stops pages being\nserved from cache. Before, any visitor who had once received the cookie\nwas never served from cache again. Sites that serve every language at the\nsame URL are unchanged: the cookie still bypasses the cache there, because\nthe cached copy could be the wrong language.<\/li>\n<li>Changed: switching the language URL mode in Polylang or WPML now refreshes\nthe plugin's runtime settings and clears the page cache.<\/li>\n<\/ul>\n\n<h4>1.21.1<\/h4>\n\n<ul>\n<li>Fixed: deactivating the plugin no longer forgets the drop-in's ownership\nrecord when advanced-cache.php could not be deleted (for example a\nread-only wp-content directory). The next activation and the uninstaller\nstill recognise the file as this plugin's; before, they would have treated\nit as another plugin's drop-in and left it in place for good.<\/li>\n<\/ul>\n\n<h4>1.21.0<\/h4>\n\n<ul>\n<li>Changed: Caching Out is now two plugins. This one is the free edition on\nWordPress.org: page caching before WordPress loads, purging on content\nchange, browser caching with GZIP and Brotli, lazy loading with dimensions\nand hero-image priority, minify and defer with their per-file controls, the\nmanual database cleanup, the full Page Audit, the full Filesystem Check, and\nthe complete safety layer. It needs no licence and never contacts our\nservers.<\/li>\n<li>Changed: Optimize CSS delivery, combine CSS and JS, delay JS, Google Fonts,\nWebP serving, YouTube click-to-load, Unused CSS\/JS, the Activity record,\nPerformance Insights, cache preloading, custom exclusion rules, scheduled\ndatabase cleanup, CDN rewriting, the Cloudflare, Varnish and Sucuri purge\nadd-ons, WP-CLI, settings export and import and Multisite Network Admin are\nnow in Caching Out Pro, a separate add-on installed alongside this plugin.<\/li>\n<li>Changed: every setting keeps its value across the upgrade, including the\nsettings of features that moved. Nothing is switched on or off by the\nupgrade. If you have a licence, install Caching Out Pro alongside this\nplugin and your settings apply again the moment it is switched on; removing\nPro later leaves this plugin running with no data loss.<\/li>\n<li>Changed: the safety layer is identical in both editions and is never gated.<\/li>\n<\/ul>\n\n<h4>Earlier versions<\/h4>\n\n<ul>\n<li>Versions before 1.21.0 were private pre-release builds and were never\npublished.<\/li>\n<\/ul>","raw_excerpt":"Page caching, browser caching, compression and lazy loading - on the moment you activate. Never cached for logged-in visitors or carts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/388351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=388351"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cachingout"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=388351"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=388351"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=388351"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=388351"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=388351"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=388351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}