#1 楼
添加样式表的filemtime()
作为版本参数。可以说,您的默认样式表位于css/default.css
和css/default.min.css
(不是style.css
)中。当我们在wp_loaded
(而不是init
)上注册样式表时,我们可以将版本作为第四个参数传递。这将是最后一次修改的时间,因此每次更改文件时都会更改。 $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。它将监视您的文件并在文件更改时立即更新它们。它还可以在多个打开的浏览器中同步滚动位置,表单提交等等。很酷。
评论
非常感谢。看来这也是以上插件的方法。在我的情况下,它没有解决问题,因为我的DNS提供程序(CloudFlare)正在缓存css文件,所以我不得不在那儿清除缓存-猜想这没有简单的方法。总的来说,我认为这是对此类问题的最佳答案,因此我将标记为已接受。再次感谢。
–cboettig
2012年1月30日23:33
为什么在开发过程中不使用本地样式表?
– fuxia♦
2012年1月31日,0:59
某些云缓存服务会将文件硬缓存8小时以上,因此您必须要求它们实施更好的版本控制服务(有些这样做),更改服务或停止使用它们。
–维克
2012年1月31日在16:38
@cboettig CloudFlare具有开发模式设置,该设置将停止缓存3小时窗口。然后,它会在3小时后自动恢复缓存。
–吉尔伯特
2014年8月25日20:13
#2 楼
在寻找了简单的解决方案很多次后,我决定找到可行的方法!所以...经过思考,我发现了一种开发新网站时覆盖缓存的好方法...(及其简单)。
我们需要告诉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文件-希望对您有所帮助;)
评论
很好,但更好的是,只需在版本的第4个参数中使用time()即可。这会给你:wp_enqueue_style('maincss',get_template_directory_uri()。'/css/style.css',array(),time(),'all');
–戴夫
18-09-13在1:41
使用时间作为第四个参数可能会导致chrome保留该版本。如果您在工作中的网站上缓存所有其他内容,则尤其如此。这样,您就向chrome提交了一个“新文件”,供他使用,而不是尝试将“旧”版本保留一段时间(与其他资源一样)。
–敏捷的SEO
18/09/13在9:24
不,在chrome上效果很好,我昨天用过。
–戴夫
18年9月14日下午3:34
这意味着您尚未在htaccess中或通过插件设置缓存/过期时间。但是,任何对您有用的;)
–敏捷的SEO
18/09/14在12:26
#3 楼
这看似过于简单,但是如何禁用缓存,直到您完成站点的开发部分为止?开启和关闭不仅简单。评论
+1-我使用Firefox的“ Web Developer”工具栏,可让您非常快速地禁用缓存(以及其他功能)
– Shane
2012年1月30日17:44
谢谢-是否只需要禁用浏览器的缓存? WP superCache是否仍会提供缓存的内容?甚至我的DNS服务都缓存,因此我不确定是否需要分别禁用每个缓存(WP,浏览器,DNS等)。
–cboettig
2012年1月30日17:48
Sorta取决于您,您必须尝试使用它并弄清楚您需要进行的配置。
–mor7ifer
2012年1月30日18:23
我和他在一起,只是禁用它,这就是我要做的。
–马特
2012年1月30日23:07
#4 楼
我知道这个问题已经接受了一个答案,但是我认为该答案对于手头的问题仍然太复杂了,并且根据用户的实际情况可能是不正确的(虽然没有冒犯),所以我认为我仍然会分享如何在我进行开发时绕过缓存(不仅限于Wordpress)。大多数现代浏览器都具有隐身模式。在这种模式下,您的计算机上没有任何内容被缓存,因此每次刷新都是从服务器上下载新文件。在Internet Explorer中,按
Ctrl + Shift + P
。在Firefox和Chrome中,请按Ctrl + Shift + N
。如果浏览器没有隐身模式,通常可以通过按IE上的
Ctrl + F5
或在Firefox和Chrome上按Ctrl + Shift + R
来强制进行硬重装。关于CSS文件(实际上是您的所有资产文件,例如图像和Javascript文件)的问题,WP Super Cache不会以任何方式对其进行缓存。您对这个插件的设置和/或使用不会影响这些文件的投放方式。缓存这些文件的是您的浏览器,这就是您进行硬重装的原因。
该插件的作用是评估Wordpress(通过PHP)如何构建HTML文件并存储副本,以便下次有人请求相同的帖子,页面或其他内容时,它可以为复制,而不必再次重新评估由PHP生成的HTML,因此节省了一些计算时间,从而可以更快地加载页面。 (我希望这很清楚。)
问题是,如果您通过PHP函数在CSS文件的URL上放置时间戳,那是对HTML的PHP评估,并且将由WP Super Cache缓存。对同一帖子的每个请求都将具有相同的时间戳,因为向用户提供了原始时间戳评估的副本。 (如果我错了,请纠正我。)
绕过WP Super Cache缓存的正确方法是在插件的设置页面中将选项
Don't cache for known users
设置为true
。最后(这是个人喜好,因为我在编码方面非常专横),诉诸隐身或强制硬重装将不需要您在HTML页面上添加不必要的标记。当然,添加时间戳仅会使每个请求的每个静态文件增加大约13个字节,但是,就像我说的那样,我很喜欢这种东西。仍然不需要13个字节。
评论
感谢您的有用提示。不幸的是,由于我的解决方案需要清除域网络服务提供商cloudflare的缓存,因此这里的答案都不是正确的,但是许多仍然是很好的信息。
–cboettig
2012年2月1日19:50
#5 楼
天哪,有很多方法可以回答这个问题!首先,您询问了两个不同的问题:WP Super Cache和CSS文件。这些文件在不同的地方以不同的方式进行缓存,因此重要的是要识别问题所在。如果使用WP Super Cache,则可以在开发过程中在functions.php中定义常量
DONOTCACHEPAGE
以防止WP Super Cache从缓存任何东西。但是,请不要忘记在启动时删除它!我相信您可以在“高级”选项卡中找到。将其分解为一个更好的解决方案,您应该考虑设置开发环境和生产环境,而您的开发环境不会启用WP Super Cache(同样,假设是您的问题)。
如果您的问题与CSS / JS文件有关,请参见上面toscho的回答以及上面m0r7if3r的后续评论。
#6 楼
对我来说,在Windows下在Bitnami堆栈上运行Wordpress的工作是编辑php.ini文件并重新启动服务器。在[opcache]部分,将opcache.revalidate_freq更改为1
opcache.revalidate_freq=1
然后我重新启动了服务器,现在我的页面立即显示对插件所做的更改。
#7 楼
当您以管理员身份登录时,HyperCache会禁用缓存。不确定WP Super Cache是否具有相同的功能。评论
有一个选项,是的。
–马修·博因斯(Matthew Boynes)
2012年1月30日21:53
#8 楼
如果您使用的是Chrome(我强烈建议),请打开Inspector,单击右下角的设置图标,然后在“网络”下选择“禁用缓存”。#9 楼
如wp超级缓存所言,但对于wp-config.php
中的常规WP缓存更改为:
define( 'WP_CACHE', false );
参考:codex.wordpress.org
评论
这实际上是解决该问题的唯一方法。谢谢!
– CoppolaEmilio
20年4月8日在22:33
#10 楼
您可以使用此代码段https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1每次加载页面时,它将生成活动主题css和js的新版本
评论
请在此处发布答案,包括所有相关代码。仅将外部站点用作参考。您的帖子应该提供完整的答案,而无需转到其他站点;如果第三方站点出现故障,您的答案将无用。
– cybmeta
17-10-20在8:22
评论
似乎也有几个插件专门用于CSS。真的有必要吗?这些插件是否可以执行清除浏览器缓存的操作?就我而言,事实证明我必须清除DNS提供商(cloudflare)创建的缓存。感谢所有以下建议。
我使用Chrome浏览器;当我在开发过程中遇到浏览器级缓存问题时,它的隐身窗口会派上用场。
希望此插件可以为您提供帮助:wordpress.org/plugins/prevent-browser-caching