You tweaked your theme’s stylesheet, hit save, reloaded the page… and nothing changed. The CSS on disk is definitely updated, but the site stubbornly looks the same. This is one of the most common — and most maddening — WordPress issues, and it almost always comes down to caching at one of three layers. Here’s how to find which one is biting you, and how to stop it happening for good.
First, rule out your browser
Your browser keeps its own copy of CSS and JavaScript files so it doesn’t re-download them on every visit. That’s usually what you’re looking at.
- Do a hard refresh:
Ctrl+F5on Windows/Linux, orCmd+Shift+Ron Mac. This forces the browser to re-fetch assets. - Still stuck? Open the page in a private / incognito window, which ignores your normal cache. If it looks right there, your browser was the culprit and clearing its cache is all you need.
Next, purge your caching plugin
If you run a caching plugin — SpeedyCache, WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Rocket and the like — it stores pre-built copies of your pages (and often a combined, minified copy of your CSS) and serves those to visitors. When you edit a file, the plugin keeps handing out the old cached version until you tell it otherwise.
- Find the plugin’s Purge or Clear cache button — usually in the top admin bar or the plugin’s settings — and clear everything.
- If it has a separate Clear minified / combined files option, use that too. Minified CSS bundles are a favourite hiding place for stale styles.
Reload and check again with a hard refresh.
The sneaky one: your asset version is frozen
Here’s the cause most people miss. WordPress adds a version number to every stylesheet and script it loads, like this:
<link rel="stylesheet" href=".../style.css?ver=1.0.0">
That ?ver= is a cache-busting tag. Browsers — and CDNs, and caching plugins — treat style.css?ver=1.0.0 and style.css?ver=1.0.1 as two completely different files. As long as that number stays the same, everyone keeps using the copy they already downloaded, even after you’ve edited the actual file.
Many themes hardcode that version as a fixed string — often the theme’s version, like 1.0.0 — and never change it. So you can edit your CSS a hundred times and the URL never changes, which means browsers never re-download it.
How to check: view your page source (Ctrl+U) or open DevTools, find your theme’s stylesheet <link>, and note the ?ver= value. Edit your CSS, reload, and look again. If the version didn’t change, you’ve found your problem.
The permanent fix: version by file modification time
Instead of a fixed version string, tie the version to the file’s last-modified time. Every time you save the file its timestamp changes, so the version changes, so browsers automatically re-download it — no manual purging.
Find where your theme enqueues its stylesheet (usually in functions.php or an included file) and change the version argument.
Before — fixed version, never changes:
wp_enqueue_style(
'mytheme-styles',
get_theme_file_uri( 'assets/css/style.css' ),
array(),
'1.0.0'
);
After — versioned by modification time:
wp_enqueue_style(
'mytheme-styles',
get_theme_file_uri( 'assets/css/style.css' ),
array(),
filemtime( get_theme_file_path( 'assets/css/style.css' ) )
);
filemtime() returns the file’s modification timestamp, which changes the moment you save an edit. Do the same for any other stylesheets or scripts your theme loads. From now on, changes go live the instant you save.
One caveat: only use filemtime() on files that actually exist in your theme — handing it a path that isn’t there throws a warning. It’s for your own theme and plugin assets, not third-party or CDN-hosted files.
Still not updating? Check for a CDN
If you use a CDN — Cloudflare, BunnyCDN, or your host’s built-in one — it caches your assets at the edge as well. After the fixes above, if a change still won’t appear, purge your CDN’s cache. In Cloudflare’s case you can also switch on Development Mode temporarily while you work.
The 30-second checklist
- Hard refresh (
Ctrl+F5/Cmd+Shift+R), or test in an incognito window. - Purge your caching plugin — including minified / combined files.
- View source and check whether the stylesheet’s
?ver=changes when you edit. If not, switch the theme tofilemtime()versioning. - Using a CDN? Purge that too.
Nine times out of ten it’s step 1 or 2. But if you’re a developer making frequent CSS changes, step 3 is the fix that makes the whole problem disappear.