If you’re like me and you set up server-side caching, CloudFlare (or any other proxy cache), and/or long Expires headers on your theme stylesheets, you know the hassles that go into invalidating those caches and forcing browsers to load an updated version.
One method to force browsers to pull the new version is to add/change the ver
parameter in the query string (WordPress’ wp_register_script
, wp_register_style
, wp_enqueue_script
, and wp_enqueue_style
have a built-in way of doing this).
Query Strings
Defining a Constant
Here’s how I used to do it: define a constant and then manually update that, as well as the Version
header in the style.css
file.
The main drawback is that I had to manually update the version number in two places: functions.php
and style.css
.
File Modification Time
Another method I’ve used at times is to add the style.css
file modification time as the query string.
This has the advantage that the cache will be invalidated every time the stylesheet file changes. For some reason, I really never cared for it that much, though. It does add a tiny bit of performance hit, as the filemtime
has to go get the file and figure out the timestamp.
WordPress Theme Version
I just read about this today and I think it’s going to be my go-to method in the future. It uses one of WordPress’ built-in theme functions to get the version number from the stylesheet.
This has a bit of overhead as well due to the function call, but I like the fact that it uses the theme version number so you can easily do Semantic Versioning.
Filename Modification
However, most performance testing tools will recommend you remove query strings altogether to improve caching especially by proxy servers. Here are two automatic methods of doing that:
File Modification Time
WordPress Theme Version
Conclusion
No matter which method you choose, setting up caching can greatly improve your site speed. It’s worth a little bit of hassle to ensure your stylesheets and scripts are cached, knowing that with any of these methods, you can easily invalidate those assets.
filemtime-filename.php
line 9 col 131 comma missing 😉
Thanks! Updated