2

First, sorry my english. I am using Local by flywheel to manager my site files and my wordpress version is 4.9.4.

Here is the problem, When I use

 wp_enqueue_style('wharever', get_stylesheet_uri());

To load style.css at the first time with a just simple content inside:

body { color: orange; }

Everything is just fine, and we have a page with everything in orange text, but when I change the style.css body color to green (or whatever), they just don't change, and always are orange.

PS.: in wp_enqueue_style, I changed the version parameter and he changes, but only at the first time and stuck with the first color I put for the version that was put.

If this is a feature of wordpress, how can I turn this off? This don't see quite useful know that we can't change style.css at will just to test without change version.

1
  • This is caused by your browser caching the stylesheet. Nothing to do with WordPress. When you add a different ?ver= to the url, it thinks it's a different stylesheet and reloads it. You can also "force refresh"; usually ctrl+f5 or apple+f5. Feb 20, 2018 at 20:07

3 Answers 3

3

Another solution is to use filemtime for the cachebusting, so that the last modified timestamp is used as the querystring variable.

This has the advantage that of still using the browser cache, and yet, a new file is served when the file is actually changed because the querystring changes. eg.

$lastmodtime= filemtime(get_stylesheet_directory().'/style.css');
wp_enqueue_style('whatever', get_stylesheet_uri(), array(), $lastmodtime);
1
  • Great idea. This way it still safely uses caching when the file hasn't changed. Thanks.
    – n8bar
    Mar 2, 2018 at 23:19
1

It is a caching problem. To get around this I append a random string to the stylesheet uri that discourages the browser from caching it.

First you need a random string. I use this simple function to generate one.

function randomAlphaNumeric($length) { $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z')); $key=''; for($i=0; $i < $length; $i++) { $key .= $pool[mt_rand(0, count($pool) - 1)]; } return $key; }

Now just use it in your enqueue like this:

wp_enqueue_style('wharever', get_stylesheet_uri().'?random='.randomAlphaNumeric(5));

2
  • 1
    or you can just wp_enqueue_style( 'wharever', get_stylesheet_uri() . '?v=' . time(), array(), $theme_version ); since the time always changing. Jan 15, 2020 at 10:20
  • 1
    @YamiOdymel That is much simpler. I really like majick's solution because it allows caching if the stylesheet hasn't been modified. His answer deserves more upvotes ;)
    – n8bar
    Apr 4, 2020 at 22:54
1

You can change your

 wp_enqueue_style('wharever', get_stylesheet_uri());

to

 wp_enqueue_style('wharever', get_stylesheet_uri(),  array(), time(), 'all');

And it will start working just fine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.