常阳时光

通过文件时间来强制浏览器更新JS或CSS文件

经常折腾 WordPress 主题的博友肯定试过修改完 css 或者 js 文件后,有时候得几经折腾(WordPress 后台禁用/手动清理缓存插件内容、刷新浏览器缓存、刷新 CDN……)才能把新的文件刷出来……最快捷的方法是手动修改 css 或者 js 文件的版本,不过,每修改一次就要手动更新版本号一次,也挺累的。

那么,如何让文件版本号自动更新呢?

方法一:用当前时间作为版本号

比如,我们可以这样控制主题 style.css 的文件版本。

<link rel="stylesheet" href="//yourdomain.com/wp-content/themes/themename/style.css?v=<?php echo time(); ?>">

但这个方法显然会相当耗费服务器资源。因为每刷新一次页面,就要获取当前时间(unix 格式)下的 css文件版本。

方法二:用文件(最后修改)时间作为版本号

filemtime 取得文件修改时间

<link rel="stylesheet" href="//yourdomain.com/wp-content/themes/themename/style.css?ver=<?php echo filemtime(http://yourdomain.com/wp-content/themes/themename/style.css); ?>" />

当然,更好的办法是用钩子,比如可以这样加载 style.css、script.js 文件和通过文件最后修改时间控制它们的版本:

function theme_scripts() {
wp_enqueue_style( 'style', get_stylesheet_uri(), array() , filemtime(get_stylesheet_directory().'/style.css'));
wp_enqueue_script( 'script', get_template_directory_uri().'/js/script.js', array(), filemtime(get_stylesheet_directory().'/js/script.js') , true );
}
add_action( 'wp_enqueue_scripts', 'theme_scripts' );

我现在用的是上面这个代码。

参考文章:

料网 — 无视WordPress缓存强制加载最新CSS和JS