{"id":358483,"date":"2026-09-01T17:01:18","date_gmt":"2026-09-01T17:01:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dadsfam-cache\/"},"modified":"2026-09-01T20:44:33","modified_gmt":"2026-09-01T20:44:33","slug":"dadsfam-cache","status":"publish","type":"plugin","link":"https:\/\/kmr.wordpress.org\/plugins\/dadsfam-cache\/","author":23486748,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.1","stable_tag":"1.7.1","tested":"7.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"DadsFam Cache","header_author":"DadsFam","header_description":"A fast, friendly page-caching plugin for WordPress & WooCommerce. Disk page caching, gzip, browser-cache rules, smart auto-purge and preloading \u2014 in plain English. Add DadsFam Cache Pro for minification, lazy-loading, delayed JavaScript, WebP, CDN and database cleanup.","assets_banners_color":"e6eef8","last_updated":"2026-09-01 20:44:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.dadsfam.co.za\/dadsfam-cache\/","header_author_uri":"https:\/\/www.dadsfam.co.za\/","rating":0,"author_block_rating":0,"active_installs":20,"downloads":100,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.1":{"tag":"1.4.1","author":"dadsfam","date":"2026-09-01 17:00:52","revision":3676543},"1.5.1":{"tag":"1.5.1","author":"dadsfam","date":"2026-09-01 18:06:55","revision":3676612},"1.6.0":{"tag":"1.6.0","author":"dadsfam","date":"2026-09-01 18:18:55","revision":3676626},"1.7.0":{"tag":"1.7.0","author":"dadsfam","date":"2026-09-01 18:30:49","revision":3676650},"1.7.1":{"tag":"1.7.1","author":"dadsfam","date":"2026-09-01 20:44:33","revision":3676824}},"upgrade_notice":{"1.7.1":"<p>Readme and listing text only \u2014 no code changed. Nothing to do.<\/p>","1.7.0":"<p>Adds AI assistant support: sixteen WordPress abilities so Claude, ChatGPT or any MCP client can check, diagnose and manage your cache without logging in. Same permissions as the settings screen. If you run the Pro add-on, update it to 1.7.0 at the same time.<\/p>","1.6.0":"<p>Rebuilt dashboard: a plain-English verdict, a dial showing how much of your site is ready, and a real measurement of how much faster cached pages are. If you run the Pro add-on, update it to 1.6.0 at the same time.<\/p>","1.5.1":"<p>Tidies up the section menu on the settings screen and adds an at-a-glance panel showing whether caching is on. Appearance only \u2014 nothing about caching changes.<\/p>","1.5.0":"<p>Adds a Support tab with plain-English fixes for the common problems and a one-line summary of your setup you can paste into a support request. Nothing about caching changes. If you run the Pro add-on, update it to 1.5.0 at the same time.<\/p>","1.3.0":"<p>Pro features have moved into a separate add-on plugin. If you have a license, download DadsFam Cache Pro from your account and install it alongside this one \u2014 your key and settings are kept and everything switches straight back on. This release also fixes several real caching bugs, including browsers holding on to stale pages after a purge.<\/p>","1.2.1":"<p>Security fix \u2014 removes an insecure wp-config backup from the web root. Update right away.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3676543,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3676543,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3676543,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3676543,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.1","1.5.1","1.6.0","1.7.0","1.7.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3676650,"resolution":"1","location":"assets","locale":"","width":1280,"height":1400},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3676650,"resolution":"2","location":"assets","locale":"","width":1280,"height":1213},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3676650,"resolution":"3","location":"assets","locale":"","width":1280,"height":1236},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3676650,"resolution":"4","location":"assets","locale":"","width":1280,"height":762},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3676650,"resolution":"5","location":"assets","locale":"","width":1280,"height":1119},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3676650,"resolution":"6","location":"assets","locale":"","width":1280,"height":1150},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3676612,"resolution":"7","location":"assets","locale":"","width":940,"height":652}},"screenshots":{"1":"Open it and you know where you stand. One plain sentence tells you whether your site is actually being served fast, a dial shows how much of it is saved and ready to go out instantly, and the measured difference sits underneath \u2014 your own home page built by WordPress versus served from cache, in milliseconds.","2":"Every setting in plain English. Each switch says what it does and when you would want it, not just what it is called.","3":"Exclusions: the pages that must never be saved. Carts, checkouts and logged-in visitors are handled for you already \u2014 add anything else that is personal to one visitor.","4":"Preloading: warm the cache yourself, so even the first visitor to a page gets a quick one.","5":"Tools: export and import your settings, reinstall the caching engine, and copy a debug summary for support.","6":"The Support tab: how to reach a real person, a one-line summary of your setup to paste into a message, and plain-English fixes for the four things people actually write in about.","7":"The rest of the DadsFam range, the guide sites and hosting, all in one place."}},"plugin_section":[],"plugin_tags":[146,144,3853,247,286],"plugin_category":[45,52,54],"plugin_contributors":[274194],"plugin_business_model":[],"class_list":["post-358483","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-caching","plugin_tags-page-cache","plugin_tags-performance","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-dadsfam","plugin_committers-dadsfam"],"banners":{"banner":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/banner-772x250.png?rev=3676543","banner_2x":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/banner-1544x500.png?rev=3676543","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/icon-128x128.png?rev=3676543","icon_2x":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/icon-256x256.png?rev=3676543","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-1.png?rev=3676650","caption":"Open it and you know where you stand. One plain sentence tells you whether your site is actually being served fast, a dial shows how much of it is saved and ready to go out instantly, and the measured difference sits underneath \u2014 your own home page built by WordPress versus served from cache, in milliseconds."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-2.png?rev=3676650","caption":"Every setting in plain English. Each switch says what it does and when you would want it, not just what it is called."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-3.png?rev=3676650","caption":"Exclusions: the pages that must never be saved. Carts, checkouts and logged-in visitors are handled for you already \u2014 add anything else that is personal to one visitor."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-4.png?rev=3676650","caption":"Preloading: warm the cache yourself, so even the first visitor to a page gets a quick one."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-5.png?rev=3676650","caption":"Tools: export and import your settings, reinstall the caching engine, and copy a debug summary for support."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-6.png?rev=3676650","caption":"The Support tab: how to reach a real person, a one-line summary of your setup to paste into a message, and plain-English fixes for the four things people actually write in about."},{"src":"https:\/\/ps.w.org\/dadsfam-cache\/assets\/screenshot-7.png?rev=3676612","caption":"The rest of the DadsFam range, the guide sites and hosting, all in one place."}],"raw_content":"<!--section=description-->\n<p>DadsFam Cache is a straightforward, no-nonsense performance plugin. It saves ready-made copies of your pages so repeat visitors skip PHP and the database entirely, and it ships with a one-click setup that applies safe, sensible defaults for you.<\/p>\n\n<p>It was built to be understandable by normal humans \u2014 every setting is written in plain English with a short explanation of what it actually does.<\/p>\n\n<h4>What you get, free<\/h4>\n\n<ul>\n<li>Disk-based full-page caching (serves cached pages before WordPress even boots)<\/li>\n<li>Gzip pre-compression of cached pages<\/li>\n<li>Browser-cache and compression rules for Apache\/LiteSpeed (.htaccess), with a copy-paste NGINX snippet<\/li>\n<li>Smart automatic clearing \u2014 edit a post and only the affected pages clear<\/li>\n<li>Clears the cache automatically after plugin, theme or WordPress updates<\/li>\n<li>Sensible exclusions out of the box (cart, checkout, my-account, logged-in users)<\/li>\n<li>Ignores tracking parameters (utm_*, fbclid, gclid\u2026) so shared links still hit cache<\/li>\n<li>Optional separate cache for mobile<\/li>\n<li>Cache preloading from your sitemap<\/li>\n<li>A dashboard that answers one question first \u2014 is my site actually being served fast? \u2014 in a sentence, with a dial showing how much of your site is saved and ready<\/li>\n<li>It measures the difference and shows you: your home page loaded twice, once built from scratch and once from cache, reported in milliseconds<\/li>\n<li>A setup track with a \"fix it\" button next to anything still outstanding, and a line explaining why each step matters<\/li>\n<li>A Support tab with plain-English fixes for the things people actually write in about, and a one-line summary of your setup to paste into a support message<\/li>\n<li>Runs from an AI assistant on WordPress 6.9+ \u2014 see below<\/li>\n<li>Built-in cache test, stats and a copy-ready debug panel<\/li>\n<li>Settings export\/import<\/li>\n<\/ul>\n\n<p>The free plugin never phones home. There is no licensing code in it at all.<\/p>\n\n<h4>Want more?<\/h4>\n\n<p><strong>DadsFam Cache Pro<\/strong> is a separate add-on plugin that installs alongside this one and adds its tabs to this same settings screen: minification, critical CSS, LCP and font optimisation, defer\/delay JavaScript, lazy-loading, WebP conversion, CDN rewriting, database cleanup, Heartbeat control and auto-preload. Grab it from https:\/\/www.dadsfam.co.za\/shop\/<\/p>\n\n<h4>For developers<\/h4>\n\n<p>This plugin is built to be extended. The add-on API:<\/p>\n\n<p><strong>Filters<\/strong><\/p>\n\n<ul>\n<li><code>dadsfam_cache_is_pro<\/code> \u2014 answer true to unlock Pro-flagged fields<\/li>\n<li><code>dadsfam_cache_has_addon<\/code> \u2014 answer true if an add-on is present<\/li>\n<li><code>dadsfam_cache_page_html<\/code> ( $html, $context ) \u2014 transform a page before it is cached<\/li>\n<li><code>dadsfam_cache_settings_defaults<\/code> ( $defaults ) \u2014 register extra settings<\/li>\n<li><code>dadsfam_cache_sanitize_settings<\/code> ( $clean, $raw ) \u2014 sanitize them on save<\/li>\n<li><code>dadsfam_cache_admin_tabs<\/code> ( $tabs ) \u2014 register settings panels<\/li>\n<li><code>dadsfam_cache_ajax_tasks<\/code> ( $tasks ) \u2014 register AJAX handlers (cap + nonce checked for you)<\/li>\n<li><code>dadsfam_cache_admin_localize<\/code> ( $data ) \u2014 add data for the admin JS<\/li>\n<li><code>dadsfam_cache_htaccess_rules_before<\/code> \/ <code>dadsfam_cache_htaccess_rules<\/code> \/ <code>dadsfam_cache_nginx_snippet<\/code><\/li>\n<li><code>dadsfam_cache_speed_setup<\/code> ( array( $settings, $notes ) ) \u2014 contribute to One-Click Speed Setup<\/li>\n<li><code>dadsfam_cache_cache_this_request<\/code> ( bool ) \u2014 veto caching for the current request<\/li>\n<li><code>dadsfam_cache_purge_post_paths<\/code> ( $paths, $post_id ) \u2014 extra paths to clear<\/li>\n<li><code>dadsfam_cache_preload_urls<\/code> ( $urls ), <code>dadsfam_cache_auto_preload<\/code> ( bool )<\/li>\n<li><code>dadsfam_cache_footer_comment<\/code> ( $comment ) \u2014 return '' to leave cached pages unmarked<\/li>\n<li><code>dadsfam_cache_debug_info<\/code> ( $rows ) \u2014 add rows to the support panel<\/li>\n<\/ul>\n\n<p><strong>Actions<\/strong><\/p>\n\n<ul>\n<li><code>dadsfam_cache_loaded<\/code> ( $version ) \u2014 the plugin is wired and safe to extend<\/li>\n<li><code>dadsfam_cache_purged_all<\/code>, <code>dadsfam_cache_purged_everything<\/code>, <code>dadsfam_cache_purged_post<\/code> ( $post_id, $paths )<\/li>\n<li><code>dadsfam_cache_settings_saved<\/code> ( $settings ), <code>dadsfam_cache_deactivated<\/code><\/li>\n<li><code>dadsfam_cache_preload_settings<\/code> \u2014 print extra fields on the Preload tab<\/li>\n<\/ul>\n\n<p>Add-ons should boot on <code>plugins_loaded<\/code> at priority 20 or later. WordPress sorts active plugins alphabetically, so an add-on's file may well be <em>included<\/em> before this one's \u2014 never touch a <code>DadsFam_Cache_<\/code> class at include time.<\/p>\n\n<p>Also useful: add <code>data-no-optimize<\/code> to any script or stylesheet tag to have Pro leave it alone, <code>data-no-lazy<\/code> on an image to keep it eager, and <code>define( 'DONOTCACHEPAGE', true );<\/code> to skip caching a request.<\/p>\n\n<h4>Works with AI assistants<\/h4>\n\n<p>If you are on WordPress 6.9 or later and have an MCP plugin connected, this plugin tells your assistant what it can do. You can ask things like \"is caching actually working on my site?\", \"why is my change not showing up?\", \"how much faster is the cached version?\" or \"stop caching the members page\", and it will read the real state of your site and act on it.<\/p>\n\n<p>Every action needs the same permission as the settings screen, so an assistant can never do more than you could. Reading is separated from changing, anything that edits a file or slows the site says so first, and removing the caching engine is not offered at all.<\/p>\n\n<h4>A word about PRO<\/h4>\n\n<p>Right, let me be straight with you, because I hate being sold to as much as you do.<\/p>\n\n<p>Everything above is free and it stays free. Caching your pages to disk, gzip, browser-cache rules, clearing the cache automatically when you change something, preloading and the one-click setup \u2014 none of those are premium features. Those are the things a cache plugin should just do, and if I put them behind a paywall I would be taking the mickey.<\/p>\n\n<p>There is a PRO add-on. It exists because I am a dad in Cape Town, and this is one of the things that puts food on the table at my house. That is the honest reason. Not \"unlock your potential\", not \"supercharge your workflow\". Just: if this plugin made your site quicker and you can spare it, PRO helps me keep building.<\/p>\n\n<p>What PRO adds is the heavier optimisation you reach for once the basics are in place \u2014 shrinking and combining your CSS and JavaScript, holding non-critical scripts back until they are needed, lazy-loading images, serving WebP, pushing static files to a CDN, and tidying up your database. That is extra speed and convenience. It is not the plugin working properly, because the plugin already works properly.<\/p>\n\n<p>So if the free one does everything you need, brilliant. Genuinely. Use it, and I hope it takes a load off your server and your visitors' patience. If you get to the point where squeezing out the last few points would help, PRO is at plugins.dadsfam.co.za.<\/p>\n\n<p>Either way, thanks for using something I built. \u2014 Zak, DadsFam<\/p>\n\n<p>PRO adds:<\/p>\n\n<ul>\n<li>Minification of CSS, JavaScript and HTML<\/li>\n<li>Critical CSS, LCP and font optimisation<\/li>\n<li>Defer and delay JavaScript until it is needed<\/li>\n<li>Lazy-loading for images and iframes<\/li>\n<li>WebP image conversion<\/li>\n<li>CDN rewriting<\/li>\n<li>Database cleanup and Heartbeat control<\/li>\n<li>Automatic preloading after a purge<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip via Plugins \u2192 Add New \u2192 Upload Plugin, then activate it.<\/li>\n<li>If you already run another caching plugin, deactivate that one first \u2014 two cache plugins on one site causes conflicts. DadsFam Cache will warn you if it spots one.<\/li>\n<li>Go to <strong>DF Cache<\/strong> in the admin menu and click <strong>One-Click Speed Setup<\/strong>.<\/li>\n<li>(Optional) For Pro features, install the separate DadsFam Cache Pro plugin alongside this one and enter your key on the License tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20it%20work%20on%20nginx%3F\"><h3>Will it work on NGINX?<\/h3><\/dt>\n<dd><p>Yes. The page cache works everywhere. Browser-cache rules are added to .htaccess only on Apache\/LiteSpeed; on NGINX the plugin gives you a snippet to paste into your server config.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. The cart, checkout and account pages are never cached, anyone holding a cart cookie always gets a live page, and shop\/product pages clear automatically when stock changes.<\/p><\/dd>\n<dt id=\"i%20was%20on%201.2.x%20with%20a%20license%20and%20my%20pro%20features%20disappeared.\"><h3>I was on 1.2.x with a license and my Pro features disappeared.<\/h3><\/dt>\n<dd><p>From 1.3.0 the Pro features live in a separate add-on plugin, DadsFam Cache Pro. Download it from your account and install it alongside this one. Your license key and every one of your settings are still saved \u2014 Pro switches straight back on.<\/p><\/dd>\n<dt id=\"it%20says%20another%20caching%20plugin%20is%20active.%20what%20now%3F\"><h3>It says another caching plugin is active. What now?<\/h3><\/dt>\n<dd><p>Deactivate the other plugin first, then run One-Click Speed Setup. Running two page-cache plugins at once will cause problems.<\/p><\/dd>\n<dt id=\"something%20looks%20wrong%20after%20a%20pro%20feature.\"><h3>Something looks wrong after a Pro feature.<\/h3><\/dt>\n<dd><p>Turn the relevant feature (minify CSS, defer\/delay JS) back off, or add the problem file to its exclusion box. Then clear the cache.<\/p><\/dd>\n<dt id=\"does%20it%20edit%20my%20wp-config.php%3F\"><h3>Does it edit my wp-config.php?<\/h3><\/dt>\n<dd><p>Yes \u2014 it adds <code>define( 'WP_CACHE', true );<\/code>, which WordPress requires for page caching to work at all. The line is marked with our name, written atomically, and removed cleanly when you deactivate.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20contact%20any%20external%20services%3F\"><h3>Does this plugin contact any external services?<\/h3><\/dt>\n<dd><p>No third-party services at all. The only HTTP requests it makes go to your own website: it visits your own pages to warm the cache (preloading), and it fetches one of your own URLs twice to run a quick self-test that confirms a page is being served from cache. Nothing is sent off-site, and no data leaves your server.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Readme only \u2014 no code changed. The screenshot captions and the feature list still described the dashboard as it was before 1.6.0, so the listing undersold what you actually get: the plain-English verdict, the coverage dial, the measured speed difference and the Support tab.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>You can now run this plugin by talking to an AI assistant. It registers sixteen abilities with WordPress (6.9 and up), so an assistant connected to your site \u2014 through Claude, ChatGPT or anything else that speaks MCP \u2014 can check whether caching is actually working, work out why it is not, measure the speed difference, clear a page or the whole cache, change settings, manage the never-cache list and warm the cache up. No logging in to wp-admin required.<\/li>\n<li>Every one of those actions needs the same permission as the settings screen, so an assistant can only do what the logged-in user could already do. Read-only actions are marked as such, and anything that writes to a file or slows the site down tells the assistant to check with you first. Removing the caching engine is deliberately not offered.<\/li>\n<li>On WordPress 6.8 and older nothing is registered and the plugin behaves exactly as before.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>The dashboard has been rebuilt. It now opens with one plain sentence telling you whether your site is actually being served fast, and a dial showing how much of your site is saved and ready to go out instantly.<\/li>\n<li>New: it measures the difference and shows you. The speed test now times your own home page twice \u2014 once built from scratch, once served from cache \u2014 and reports both numbers in milliseconds, so you can see what your visitors get instead of taking my word for it.<\/li>\n<li>The setup list is now a progress track with a \"fix it\" button next to anything still outstanding, and each step explains in one line why it matters.<\/li>\n<li>Quick actions became proper tiles, each saying what it does and when you would want it.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>The section menu down the left has been rebuilt to match the rest of the screen: a dark rail with a marker showing where you are, and a small panel at the bottom telling you at a glance whether caching is on, how many pages are stored and which version you are running. On a phone or a narrow window it becomes a single row you can swipe.<\/li>\n<li>Appearance only \u2014 no change to caching, settings or your cached files.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New Support tab: how to reach a real person, a one-line summary of your setup you can copy straight into a support message, and plain-English answers to the four things people actually write in about \u2014 changes not showing up, the site looking broken, carts and checkouts behaving oddly, and how to tell whether caching is doing anything at all. Each answer has a button that takes you to the screen you need.<\/li>\n<li>The \"More from DadsFam\" list is now a proper set of cards showing the rest of the range, with links to the guides and to hosting.<\/li>\n<li>No change to caching behaviour, your settings or your cached files.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Hardening: every value read from the incoming request is now filtered before use. In particular the server protocol is checked against a fixed list before it can reach a response header, so a malicious request cannot inject headers of its own.<\/li>\n<li>The page-capture output buffer is now closed explicitly at shutdown instead of being left for PHP to unwind, which keeps it aligned with buffers opened by other plugins or the theme.<\/li>\n<li>No change to settings, cached files or behaviour.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Housekeeping release, to meet the WordPress.org naming guidelines. Everything the plugin registers inside WordPress \u2014 its settings, its scheduled jobs, its hooks and its classes \u2014 now carries a full-length <code>dadsfam_cache<\/code> name instead of the old short <code>dfc<\/code> one, so it cannot collide with another plugin or theme on your site.<\/li>\n<li>Your settings, licence, preload queue and dismissed notices are moved to the new names automatically the first time the updated plugin loads. Nothing is lost, and no cached file is touched \u2014 the cache is simply rebuilt fresh. The drop-in and per-host config are refreshed to match.<\/li>\n<li>Add-on hooks were renamed to match (for example <code>dfc_settings_saved<\/code> is now <code>dadsfam_cache_settings_saved<\/code>), so DadsFam Cache Pro must be updated to 1.4.0 at the same time. If one is updated without the other, Pro simply shows a notice instead of loading \u2014 nothing breaks.<\/li>\n<li>Added a plain-English \"A word about PRO\" note to the readme \u2014 what stays free, why the optional add-on exists, and what it does. No features were moved behind a paywall.<\/li>\n<li>Housekeeping: the readme now lists the current WordPress and PHP versions it is tested against.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<p><strong>The plugin is now free + Pro as two separate plugins.<\/strong> This one is the free page cache and never phones home. Pro features moved to the DadsFam Cache Pro add-on, which installs alongside it and adds its tabs to the same settings screen. Your settings and license key are untouched by the update \u2014 install Pro and everything switches back on exactly as it was.<\/p>\n\n<p>Fixes and improvements in this release:<\/p>\n\n<ul>\n<li>FIXED: cached pages are now served with an explicit <code>Cache-Control: public, max-age=0, must-revalidate<\/code>. Without it browsers guessed a freshness lifetime from Last-Modified, so a returning visitor could sit on a stale page for hours after you cleared the cache.<\/li>\n<li>FIXED: the drop-in no longer sends a Content-Length when PHP's <code>zlib.output_compression<\/code> is on. PHP rewrites the body in that case, so the length described the wrong thing and browsers truncated the page.<\/li>\n<li>FIXED: cached pages are served with your site's actual charset instead of a hardcoded UTF-8.<\/li>\n<li>FIXED: <code>Vary: User-Agent<\/code> is now sent when the separate mobile cache is on. Without it a proxy in front of the site could hand the desktop page to a phone.<\/li>\n<li>FIXED: browser-cache rules spelled out <code>max-age<\/code> explicitly. The old <code>Header set Cache-Control \"public, immutable\"<\/code> overwrote the max-age that mod_expires had just set, leaving assets with no freshness lifetime at all \u2014 the opposite of what browser caching is for.<\/li>\n<li>FIXED: <code>immutable<\/code> is no longer applied to images. They carry no <code>?ver=<\/code> cache-buster, so re-uploading a photo under the same filename was invisible to returning visitors for six months.<\/li>\n<li>FIXED: clearing a single page now works for URLs containing <code>[<\/code>, <code>]<\/code>, <code>*<\/code> or <code>?<\/code>. The old code used glob(), which silently matched nothing for those slugs.<\/li>\n<li>FIXED: advanced-cache.php is written atomically. A visitor whose request landed mid-write could previously include a half-written file and fatal.<\/li>\n<li>FIXED: minified assets are garbage-collected after 30 days. They are content-hashed, so nothing ever removed the old ones and the folder grew forever.<\/li>\n<li>NEW: \"Clear All Cache\", saving settings, and updates now clear generated assets as well as pages.<\/li>\n<li>NEW: the generated drop-in config folder is protected from direct HTTP access.<\/li>\n<li>NEW: a full add-on API (see the developer notes) \u2014 tabs, AJAX tasks, settings and the page pipeline are all extension points.<\/li>\n<li>NEW: <code>dadsfam_cache_footer_comment<\/code> filter, and the signature comment no longer advertises the plugin version.<\/li>\n<li>NEW: \"Rewrite .htaccess rules\" button on the Tools tab.<\/li>\n<li>Site-wide purge hooks now go through an argument-safe wrapper, so a WordPress hook can never pass a stray value into a purge.<\/li>\n<li>Widget changes now clear the cache.<\/li>\n<li>Conflict detection covers NitroPack and WP-Optimize, understands multisite network-activated plugins, and no longer flags plugins that do not own advanced-cache.php.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>FIXED: The admin-bar \"Clear all cache\" \/ \"Clear this page\" links now return you to the exact page you were on. Previously they redirected to the HTTP referer, which broke when purging from action endpoints \u2014 e.g. clicking purge from the plugin-upload screen landed on update.php's \"Please select a file\" error. The link now carries an explicit return URL, and the handler refuses to bounce back to form-target-only endpoints (update.php, admin-post.php, async-upload.php, wp-login.php), falling back to the DF Cache settings page.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Security fix: earlier versions saved a wp-config.php backup (wp-config.dfc-backup.php) in the web root when enabling caching, which could expose database credentials. That backup is no longer created, any existing copy is deleted automatically on update, and wp-config.php is now edited with a safe atomic write that needs no backup.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New Pro: WebP image conversion, with bulk conversion and auto-conversion of new uploads.<\/li>\n<li>Added an Images tab with conversion progress, counts and quality control.<\/li>\n<li>One-Click Speed Setup now enables WebP serving when the server supports it.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New Pro: render-blocking CSS elimination, LCP image optimisation, font optimisation and link prefetching.<\/li>\n<li>One-Click Speed Setup now enables the LCP, font and prefetch optimisations automatically.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: disk page caching, gzip, browser-cache\/.htaccess rules, smart purge, exclusions, preloading, stats and cache testing.<\/li>\n<\/ul>","raw_excerpt":"Make your WordPress and WooCommerce site lekker fast \u2014 friendly page caching, no rocket science required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358483"}],"author":[{"embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dadsfam"}],"wp:attachment":[{"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358483"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358483"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358483"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358483"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358483"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kmr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}