Why don't WordPress changes show up straight away?
Because a cache is doing its job. Every layer between your edit and a visitor keeps a saved copy of the page, or of the files it loads, so it doesn't have to build them again. That copy doesn't know you've just pressed Update, and it keeps serving what it saved until it expires or somebody clears it. Sorting out which layer holds what is a regular part of my WordPress speed optimization service.
So the question isn't whether to clear the cache. It's which one, and in what order. Clear the wrong layer and nothing changes. Clear the right ones in the wrong order and an outer cache refills itself from an inner one that's still stale.
Before I purge anything, I rule out two causes that aren't caching at all. Is the change actually published, not sitting in a draft or a pending revision? And am I looking at the site I edited, not a staging copy or a domain whose DNS still points at an old host?
If a change shows while you're logged in but not in a private window, it's almost certainly a cache. Many page caches hand logged-in users a fresh page and everyone else the saved one.
Which caches sit between an edit and a visitor?
Counting from the database outwards, these are the layers I expect on a typical WordPress site. Not every site has all of them, so finding yours comes first.
| Layer | What it holds | Sign it's the one |
|---|---|---|
| Page builder files | Generated CSS files, and with Elementor's Element Caching, rendered widget HTML kept in the database | The text is new but spacing, colours or fonts are old |
| Object cache | Database results held in Redis or Memcached, when the host runs one | A setting or menu change won't stick |
| Caching plugin | Whole HTML pages, plus the minified CSS and JavaScript it built | Logged in you see the change, logged out you don't |
| Host server cache | Full pages cached by the server in front of PHP | The plugin's been cleared and the page is still old |
| CDN | Copies kept at the edge, near the visitor | The headers say HIT |
| Browser | Files your own browser saved, for as long as the cache headers allowed | Other people see the change and you don't |
Two of those catch people out. Cloudflare doesn't cache HTML by default, only static files such as CSS, JavaScript and images. If a Cloudflare site keeps serving an old page, not just old styling, someone's usually added a cache rule that makes HTML eligible, so that's where I look first.
The other is the browser. Cloudflare's documentation says a purge doesn't affect assets already stored in a visitor's browser, and its default Browser Cache TTL is four hours. So a file that keeps the same URL can stay old on a returning visitor's screen long after every server has the new one.
How I clear cache in WordPress, layer by layer, from the inside out
The rule's simple: clear the layer closest to WordPress first, then work outwards. Each outer layer refills itself from the one inside it, so purging the CDN while the host's cache is stale just copies the stale page back to the edge.
- Step 01
Regenerate the page builder's CSS
Elementor writes its styles to CSS files under
/wp-content/uploads/elementor/css/, and its Clear Files & Data tool clears them so they're rebuilt from the current settings. On Divi 5 it's the Clear CSS Cache button in Theme Options. - Step 02
Flush the object cache, if there is one
If the host runs Redis or Memcached, I flush it from their panel or with
wp cache flush. The WP-CLI docs warn that on a multisite with a persistent object cache, this typically flushes every site in the network. - Step 03
Purge the caching plugin
Its clear or purge all button empties the saved pages and, on most plugins, the minified CSS and JavaScript it built. The next section lists where that button sits in the common plugins.
- Step 04
Clear the host's server cache
Plenty of managed hosts run their own full page cache in front of WordPress, and a plugin purge doesn't always reach it. I clear it from the hosting panel or the host's own admin bar button.
- Step 05
Purge the CDN by URL
In Cloudflare I purge the exact URLs that changed, plus any CSS or JavaScript file whose content changed under the same address. Cloudflare calls purge by URL its recommended method; purge everything empties the edge for the whole site.
- Step 06
Check in a clean browser
Last, I load the page in a private window or with the cache disabled in DevTools. A hard reload works for one page: Ctrl+Shift+R in Chrome, Edge and Firefox on Windows, Cmd+Shift+R in Chrome and Firefox on a Mac, and Option+Cmd+R in Safari. That's only my own browser, though.
Don't purge the CDN first. It feels like the biggest hammer, but while the host's cache still holds the old page, the edge just fetches it again.
Rather have me do this? One person, whole job.
Book a call on UpworkWhere's the clear cache button in each caching plugin and host?
Each one hides it somewhere different. This is where the vendors' own docs put it, checked on 28 September 2026.
- i.
WP Rocket
Clear and preload cache, in the WP Rocket menu on the admin bar or under Settings, WP Rocket, Dashboard. A single page has its own Clear this cache link in the Pages or Posts list.
- ii.
LiteSpeed Cache
Purge All, in the Toolbox or the admin bar menu. LiteSpeed's docs say it purges everything except Critical CSS, Unique CSS and LQIP, so those need their own buttons.
- iii.
W3 Total Cache
The Performance menu in the admin bar, where a plugin contributor on the WordPress.org forum points people to purge all caches.
- iv.
WP Super Cache
Its settings page, under Settings, WP Super Cache, which is where the plugin's own instructions tell you to clear the cache.
- v.
SiteGround
Site Tools, Speed, Caching, then the Dynamic Cache tab, where a Flush Cache icon clears each site. Memcached has its own tab and flushes for all sites at once.
- vi.
Kinsta
The Clear Cache link in the admin toolbar, which needs the Kinsta MU plugin, or Sites, your site, Caching, Server Caching, Clear cache in MyKinsta. That second route doesn't clear the CDN cache.
- vii.
WP Engine
The site's Cache screen in the User Portal, where Clear all caches covers the page cache, network caches including the CDN, and the object cache if it's on.
- viii.
Hostinger
Cache Manager, under Websites, Dashboard, purges the whole site or one URL. Hostinger's help says it controls only the LiteSpeed web server cache, not the CDN.
How do I clear the WordPress cache manually, without a plugin?
Delete the page cache files over SFTP or the host's file manager. It's the fallback when a broken cached page stops the dashboard loading. WP Super Cache, for example, keeps its pages in wp-content/cache/supercache/ with a folder named after your host, and its documentation says the cache directory "is only for temporary files".
I delete the cached pages inside that folder and nothing else. Files like wp-content/advanced-cache.php and wp-cache-config.php are the plugin's setup, not cached pages, so removing them changes how caching runs rather than clearing it. Server caches run by the host, and Cloudflare, don't live in WordPress's files at all, so they still need their own purge.
How do I prove what's actually live?
I stop trusting screens and ask the server directly. A request from the command line has no browser cache behind it. I add a query string nobody's used before, like ?cb= followed by the time, because Cloudflare's default cache key includes the query string, so to the CDN it's a new address with no saved copy, unless someone's set the cache key to ignore query strings.
Then I read the headers, not the page. curl -sI shows them without the body. On Cloudflare, cf-cache-status says what the edge did: HIT means it served a saved copy, MISS means it fetched from the server, and DYNAMIC means it didn't treat the response as cacheable. Hosts add headers of their own, and the names vary.
Once the busted URL shows the change, I request the plain URL too. If the plain one's still old, an outer cache is holding it, which is the usual story behind a WordPress cache not clearing. If both are old, the problem sits further in: the change never reached the server, or it's stuck in the builder's CSS or the object cache. It's the same request I run against old URLs in the first hour after a site moves platforms.
The trap most guides skip makes a correct deploy look broken. A theme usually loads its stylesheet with a ?ver= number, and the WordPress reference says that when no version's given, it adds the installed WordPress version instead. Edit style.css without bumping the theme's version and the file's URL doesn't change, so a browser that saved the old file keeps using it.
It's caught me on my own site. A stylesheet fix shipped under an unchanged URL, every server-side check said the deploy was right, and browsers showed the old layout for hours. The fix wasn't another purge. It was the cache-busting pattern MDN describes: put a version or hash in the file's address and never change a file in place.
Why can a page builder keep showing old styles?
Because builders cache their own output, separately from every layer above them. Elementor's developer docs say the styles set in the editor are saved in the database and used to generate CSS files. If a file isn't regenerated, the database has the new colour and the file still has the old one. Divi 5 does much the same with a static CSS cache, and its help centre puts clearing it first after an update.
Elementor's Element Caching goes further, storing a widget's rendered HTML in the database. Elementor says it's off by default for widgets and meant for static elements, though containers and sections are always cached once it's on. Where it's on, I treat it as one more layer: Clear Files & Data, then purge outwards again. Its speed and cache options sit with the other Elementor SEO settings.
Builders also cause stale styling that isn't a cache at all, like custom CSS pasted into three places. That's where a cache question turns into what the builder's markup does to the page. On Divi, the Theme Options I check for search sit near the CSS settings, so I look at both.
If you've cleared every layer, the headers say MISS and the page is still wrong, or the site's slow once the cache is empty, that's the caching and speed work I do, remotely, over a shared screen or async. I find which layer's doing what and fix that layer.
Book a call on Upwork
