测试站点更改的外观时,是否有一种简单的方法可以防止所有缓存?我使用WP Super Cache。我可以使用提供的选项删除其缓存,删除浏览器的缓存,但是对CSS或小部件的某些更改仍然不会刷新。我尝试其他变通方法,例如切换浏览器或计算机,但是必须有一个更加简化的工作流程,在此可以确保我正在查看所做的更改,而不是某些早期缓存的格式?最好的解决方案是什么?
测试站点更改的外观时,是否有一种简单的方法可以防止所有缓存?我使用WP Super Cache。我可以使用提供的选项删除其缓存,删除浏览器的缓存,但是对CSS或小部件的某些更改仍然不会刷新。我尝试其他变通方法,例如切换浏览器或计算机,但是必须有一个更加简化的工作流程,在此可以确保我正在查看所做的更改,而不是某些早期缓存的格式?最好的解决方案是什么?
Answers:
将filemtime()
样式表的添加为版本参数。可以说,您的默认样式表位于css/default.css
和css/default.min.css
(不是style.css
)中。当我们在wp_loaded
(notinit
)上注册样式表时,我们可以将版本作为第四个参数传递。那将是最后修改的时间,因此每次我们更改文件时都会更改。
$min = WP_DEBUG ? '': '.min';
$file = "/css/default$min.css";
$url = get_template_directory_uri() . $file;
$path = get_template_directory() . $file;
$handle = get_stylesheet() . '-default';
// Overridden?
if ( is_child_theme() && is_readable( get_stylesheet_directory() . $file ) )
{
$url = get_stylesheet_directory_uri() . $file;
$path = get_stylesheet_directory() . $file;
}
$modified = filemtime( $path );
add_action( 'wp_loaded', function() use ( $handle, $url, $modified ) {
wp_register_style( $handle, $url, [], $modified );
});
add_action( 'wp_enqueue_scripts', function() use ( $handle ) {
wp_enqueue_style( $handle );
});
如果您使用的是Node.js和Grunt,则强烈建议使用Browsersync。它将监视您的文件并在文件更改时立即更新它们。它还可以在多个打开的浏览器中同步滚动位置,表单提交等等。很酷。
在寻找简单的解决方案很多次后,我决定找到可行的方法!
所以...考虑了一下之后,我发现了一种开发新网站时覆盖缓存的好方法...(而且很简单)。
我们需要告诉wp这是一个像这样的新CSS版本...
更改之前:
wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), false, 'all' );
更改后:
wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css?v='.time(), array(), false, 'all' );
这是我们添加的内容:
?v='.time()
说明:
我们基本上是在将动态版本号添加到css文件中,这迫使浏览器每次更新时都加载新的css。
完成开发后,请不要忘记将其删除,否则该文件的缓存将无法正常工作,并且会加载该文件,以供反复返回的用户使用。
此技术适用于css和js文件-希望对您有所帮助;)
wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), time(), 'all' );
这看起来似乎太简单了,但是如何禁用缓存,直到您完成站点的开发部分为止?开启和关闭不仅简单。
我知道这个问题已经接受了一个答案,但是我认为该答案对于手头的问题仍然太复杂了,并且根据用户的实际情况可能是不正确的(尽管没有冒犯),所以我想我仍然会分享如何在我进行开发时绕过缓存(不仅限于Wordpress)。
大多数现代浏览器都有一种叫做隐身模式的东西。在这种模式下,计算机中没有任何内容被缓存,因此每次刷新都是从服务器上下载新文件。在Internet Explorer中,按Ctrl + Shift + P
。在Firefox和Chrome中,按Ctrl + Shift + N
。
如果您的浏览器没有隐身模式,通常可以通过按 Ctrl + F5
IE或Ctrl + Shift + R
在Firefox和Chrome上。
至于您对CSS文件(实际上是您的所有资产文件,例如图像和Javascript文件)的疑问,WP Super Cache不会以任何方式对其进行缓存。您对这个插件的设置和/或使用不会影响这些文件的投放方式。缓存这些文件的是您的浏览器,这就是您进行硬重新加载的原因。
插件的作用是评估Wordpress(通过PHP)如何构建HTML文件并存储副本,以便下次有人请求相同的帖子,页面或其他内容时,它将提供副本,而不必重新评估PHP生成的HTML,从而节省一些计算时间,从而更快地加载页面。(我希望这很清楚。)
这样做的问题是,如果您通过PHP函数在CSS文件的URL上设置了时间戳记,那么这就是对HTML的PHP评估,并且将可湿性粉剂超高速缓存进行缓存。对同一帖子的每个请求都将具有相同的时间戳,因为向用户提供了原始时间戳评估的副本。(如果我错了纠正我。)
正确的方法来绕过可湿性粉剂超高速缓存的缓存是将选项设置Don't cache for known users
,以true
在插件的设置页。
最后(这是个人喜好,因为我在编码方面非常专横),诉诸隐身或强制硬重装将不需要您在HTML页面上添加不必要的标记。当然,添加一个时间戳只会为每个请求每个静态文件增加大约13个字节,但是,就像我说的那样,我很喜欢这种东西。仍然不需要13个字节。
天哪,有很多方法可以回答这个问题!首先,您询问了两个不同的问题:WP Super Cache和CSS文件。这些文件在不同的地方以不同的方式缓存,因此识别出问题所在很重要。
如果是WP Super Cache,则可以DONOTCACHEPAGE
在开发过程中在您的functions.php中定义常量,以防止WP Super Cache缓存任何内容。不过,不要忘记在启动时删除它!
define('DONOTCACHEPAGE', true);
每个网站都有一个唯一的关键字,可以附加到URL上以加载页面的新版本,我相信您可以在“高级”标签中找到该页面。
将其分解为更好的解决方案,您应该考虑设置开发环境和生产环境,在这些环境中,您的开发环境未启用WP Super Cache(同样,假设是您的问题)。
如果您的问题与CSS / JS文件有关,则请参见上面toscho的答案以及m0r7if3r的后续评论。
您可以使用此代码段 https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1
每次加载页面时,它将生成活动主题css和js的新版本