DadsFam Cache
DadsFam Cache
Description
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.
It was built to be understandable by normal humans — every setting is written in plain English with a short explanation of what it actually does.
What you get, free
- Disk-based full-page caching (serves cached pages before WordPress even boots)
- Gzip pre-compression of cached pages
- Browser-cache and compression rules for Apache/LiteSpeed (.htaccess), with a copy-paste NGINX snippet
- Smart automatic clearing — edit a post and only the affected pages clear
- Clears the cache automatically after plugin, theme or WordPress updates
- Sensible exclusions out of the box (cart, checkout, my-account, logged-in users)
- Ignores tracking parameters (utm_*, fbclid, gclid…) so shared links still hit cache
- Optional separate cache for mobile
- Cache preloading from your sitemap
- A dashboard that answers one question first — is my site actually being served fast? — in a sentence, with a dial showing how much of your site is saved and ready
- It measures the difference and shows you: your home page loaded twice, once built from scratch and once from cache, reported in milliseconds
- A setup track with a “fix it” button next to anything still outstanding, and a line explaining why each step matters
- 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
- Runs from an AI assistant on WordPress 6.9+ — see below
- Built-in cache test, stats and a copy-ready debug panel
- Settings export/import
The free plugin never phones home. There is no licensing code in it at all.
Want more?
DadsFam Cache Pro 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/
For developers
This plugin is built to be extended. The add-on API:
Filters
dadsfam_cache_is_pro— answer true to unlock Pro-flagged fieldsdadsfam_cache_has_addon— answer true if an add-on is presentdadsfam_cache_page_html( $html, $context ) — transform a page before it is cacheddadsfam_cache_settings_defaults( $defaults ) — register extra settingsdadsfam_cache_sanitize_settings( $clean, $raw ) — sanitize them on savedadsfam_cache_admin_tabs( $tabs ) — register settings panelsdadsfam_cache_ajax_tasks( $tasks ) — register AJAX handlers (cap + nonce checked for you)dadsfam_cache_admin_localize( $data ) — add data for the admin JSdadsfam_cache_htaccess_rules_before/dadsfam_cache_htaccess_rules/dadsfam_cache_nginx_snippetdadsfam_cache_speed_setup( array( $settings, $notes ) ) — contribute to One-Click Speed Setupdadsfam_cache_cache_this_request( bool ) — veto caching for the current requestdadsfam_cache_purge_post_paths( $paths, $post_id ) — extra paths to cleardadsfam_cache_preload_urls( $urls ),dadsfam_cache_auto_preload( bool )dadsfam_cache_footer_comment( $comment ) — return ” to leave cached pages unmarkeddadsfam_cache_debug_info( $rows ) — add rows to the support panel
Actions
dadsfam_cache_loaded( $version ) — the plugin is wired and safe to extenddadsfam_cache_purged_all,dadsfam_cache_purged_everything,dadsfam_cache_purged_post( $post_id, $paths )dadsfam_cache_settings_saved( $settings ),dadsfam_cache_deactivateddadsfam_cache_preload_settings— print extra fields on the Preload tab
Add-ons should boot on plugins_loaded at priority 20 or later. WordPress sorts active plugins alphabetically, so an add-on’s file may well be included before this one’s — never touch a DadsFam_Cache_ class at include time.
Also useful: add data-no-optimize to any script or stylesheet tag to have Pro leave it alone, data-no-lazy on an image to keep it eager, and define( 'DONOTCACHEPAGE', true ); to skip caching a request.
Works with AI assistants
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.
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.
A word about PRO
Right, let me be straight with you, because I hate being sold to as much as you do.
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 — 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.
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.
What PRO adds is the heavier optimisation you reach for once the basics are in place — 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.
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.
Either way, thanks for using something I built. — Zak, DadsFam
PRO adds:
- Minification of CSS, JavaScript and HTML
- Critical CSS, LCP and font optimisation
- Defer and delay JavaScript until it is needed
- Lazy-loading for images and iframes
- WebP image conversion
- CDN rewriting
- Database cleanup and Heartbeat control
- Automatic preloading after a purge
Installation
- Upload the plugin zip via Plugins Add New Upload Plugin, then activate it.
- If you already run another caching plugin, deactivate that one first — two cache plugins on one site causes conflicts. DadsFam Cache will warn you if it spots one.
- Go to DF Cache in the admin menu and click One-Click Speed Setup.
- (Optional) For Pro features, install the separate DadsFam Cache Pro plugin alongside this one and enter your key on the License tab.
Screenshots

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 — your own home page built by WordPress versus served from cache, in milliseconds.

Every setting in plain English. Each switch says what it does and when you would want it, not just what it is called.

Exclusions: the pages that must never be saved. Carts, checkouts and logged-in visitors are handled for you already — add anything else that is personal to one visitor.

Preloading: warm the cache yourself, so even the first visitor to a page gets a quick one.

Tools: export and import your settings, reinstall the caching engine, and copy a debug summary for support.

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.

The rest of the DadsFam range, the guide sites and hosting, all in one place.
Faq
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.
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.
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 — Pro switches straight back on.
Deactivate the other plugin first, then run One-Click Speed Setup. Running two page-cache plugins at once will cause problems.
Turn the relevant feature (minify CSS, defer/delay JS) back off, or add the problem file to its exclusion box. Then clear the cache.
Yes — it adds define( 'WP_CACHE', true );, 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.
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.
Reviews
Changelog
1.7.1
- Readme only — 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.
1.7.0
- 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 — through Claude, ChatGPT or anything else that speaks MCP — 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.
- 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.
- On WordPress 6.8 and older nothing is registered and the plugin behaves exactly as before.
1.6.0
- 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.
- New: it measures the difference and shows you. The speed test now times your own home page twice — once built from scratch, once served from cache — and reports both numbers in milliseconds, so you can see what your visitors get instead of taking my word for it.
- 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.
- Quick actions became proper tiles, each saying what it does and when you would want it.
1.5.1
- 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.
- Appearance only — no change to caching, settings or your cached files.
1.5.0
- 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 — 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.
- 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.
- No change to caching behaviour, your settings or your cached files.
1.4.1
- 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.
- 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.
- No change to settings, cached files or behaviour.
1.4.0
- Housekeeping release, to meet the WordPress.org naming guidelines. Everything the plugin registers inside WordPress — its settings, its scheduled jobs, its hooks and its classes — now carries a full-length
dadsfam_cachename instead of the old shortdfcone, so it cannot collide with another plugin or theme on your site. - 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 — the cache is simply rebuilt fresh. The drop-in and per-host config are refreshed to match.
- Add-on hooks were renamed to match (for example
dfc_settings_savedis nowdadsfam_cache_settings_saved), 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 — nothing breaks. - Added a plain-English “A word about PRO” note to the readme — what stays free, why the optional add-on exists, and what it does. No features were moved behind a paywall.
- Housekeeping: the readme now lists the current WordPress and PHP versions it is tested against.
1.3.0
The plugin is now free + Pro as two separate plugins. 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 — install Pro and everything switches back on exactly as it was.
Fixes and improvements in this release:
- FIXED: cached pages are now served with an explicit
Cache-Control: public, max-age=0, must-revalidate. 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. - FIXED: the drop-in no longer sends a Content-Length when PHP’s
zlib.output_compressionis on. PHP rewrites the body in that case, so the length described the wrong thing and browsers truncated the page. - FIXED: cached pages are served with your site’s actual charset instead of a hardcoded UTF-8.
- FIXED:
Vary: User-Agentis 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. - FIXED: browser-cache rules spelled out
max-ageexplicitly. The oldHeader set Cache-Control "public, immutable"overwrote the max-age that mod_expires had just set, leaving assets with no freshness lifetime at all — the opposite of what browser caching is for. - FIXED:
immutableis no longer applied to images. They carry no?ver=cache-buster, so re-uploading a photo under the same filename was invisible to returning visitors for six months. - FIXED: clearing a single page now works for URLs containing
[,],*or?. The old code used glob(), which silently matched nothing for those slugs. - FIXED: advanced-cache.php is written atomically. A visitor whose request landed mid-write could previously include a half-written file and fatal.
- 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.
- NEW: “Clear All Cache”, saving settings, and updates now clear generated assets as well as pages.
- NEW: the generated drop-in config folder is protected from direct HTTP access.
- NEW: a full add-on API (see the developer notes) — tabs, AJAX tasks, settings and the page pipeline are all extension points.
- NEW:
dadsfam_cache_footer_commentfilter, and the signature comment no longer advertises the plugin version. - NEW: “Rewrite .htaccess rules” button on the Tools tab.
- Site-wide purge hooks now go through an argument-safe wrapper, so a WordPress hook can never pass a stray value into a purge.
- Widget changes now clear the cache.
- Conflict detection covers NitroPack and WP-Optimize, understands multisite network-activated plugins, and no longer flags plugins that do not own advanced-cache.php.
1.2.2
- 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 — 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.
1.2.1
- 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.
1.2.0
- New Pro: WebP image conversion, with bulk conversion and auto-conversion of new uploads.
- Added an Images tab with conversion progress, counts and quality control.
- One-Click Speed Setup now enables WebP serving when the server supports it.
1.1.0
- New Pro: render-blocking CSS elimination, LCP image optimisation, font optimisation and link prefetching.
- One-Click Speed Setup now enables the LCP, font and prefetch optimisations automatically.
1.0.0
- Initial release: disk page caching, gzip, browser-cache/.htaccess rules, smart purge, exclusions, preloading, stats and cache testing.