我正在WordPress中建立类似Digg的网站。
安装W3 Total Cache后,我注意到某些元素(例如每个帖子的投票数(和选民ID))被缓存,即使它们不应该“不是”(至少在用户对文章投了票之后)。
我认为不可能阻止页面中的特定元素被缓存(或者是?),所以我想到了触发页面缓存以编程方式刷新。
有任何建议吗?
#1 楼
如果要刷新缓存,可以执行以下操作:插件具有用于该功能的
<?php
flush_pgcache() //page cache
flush_dbcache() // database cache
flush_minify() // minify cache
flush_all() //all caches
?>
,您只需要这样调用即可:
<?php
$w3_plugin_totalcache->flush_all();
?>
,这基本上是标题中的问题的答案
“以编程方式进行缓存刷新”
#2 楼
用w3tc v0.9.3中的帖子ID刷新单个页面,我发现这可行:if (function_exists('w3tc_pgcache_flush_post')){
w3tc_pgcache_flush_post($post_id);
}
评论
您将此代码放在哪里?看起来它运行在每个页面加载(针对该ID)上。有没有办法防止完全缓存?
– s_ha_dum
2014年3月20日在22:31
@s_ha_dum您能找出我们可以使用哪个钩子使用此代码吗?
– Prafulla Kumar Sahu
16年11月17日在8:42
如果自定义代码/插件附加到的事件在插件加载后执行(通常是这种情况),则不需要额外的钩子。所有可用功能均在W3TC插件目录的w3-total-cache-api.php中。
–沃尔夫
18年8月1日在2:29
谢谢您,这对我现在有所帮助,在2018年12月。一旦客户端访问了某个页面(当代理可用时将显示一个设置页面),我就需要一种刷新主页缓存的方法。这对于特定页面非常有用,但是如果有一个功能像“清除所有缓存”那样刷新所有缓存,那就太好了!
–乔丹·卡特
18年1月1日在21:47
#3 楼
W3 Total Cache支持片段缓存。来自常见问题解答:How do I implement fragment caching?
Edit your templates to with the following syntax to ensure that dynamic features remain so:
Example 1:
<!-- mfunc any PHP code --><!-- /mfunc -->
Example 2:
<!-- mfunc -->any PHP code<!-- /mfunc -->
Example 3:
<!--MFUNC -->
echo rand();
<!--/mfunc -->
Example 4:
<!-- mclude path/to/file.php --><!-- /mclude -->
Example 5:
<!-- mclude -->path/to/file.php<!-- /mclude -->
评论
谢谢拉斯特。但是,当我使用上述任何示例时,都会收到错误解析错误:语法错误,意外的“ <”
–user1567
2011年1月17日14:34
@ user1567您可能与打开/关闭<?php?>标记不匹配。我还没有使用这些,所以没有实用的代码片段来显示。
–稀有
2011年1月17日下午14:57
一方面,我想在不缓存的情况下加载functions.php。 functions.php中的以下代码触发了上述错误:<?php <!-mclude-> require_once(functions2.php)<!-/ mclude->?>代码有什么问题?
–user1567
2011年1月17日15:20
@ user1567根据示例,应该类似于?> <!-mclude-> functions2.php <!-/ mclude-> <?php(我认为:)
–稀有
2011年1月17日15:36
无法启动片段缓存。我的问题在这里描述:stackoverflow.com/questions/31125413/…
–JackTheKnife
15年6月30日在16:38
#4 楼
Bainternet的解决方案似乎对我不起作用。我已成功在插件中使用此替代代码段,并在admin_init动作中加载:
// Clear all W3 Total Cache
if( class_exists('W3_Plugin_TotalCacheAdmin') )
{
$plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin');
$plugin_totalcacheadmin->flush_all();
echo __('<div class="updated"><p>All <strong>W3 Total Cache</strong> caches successfully emptied.</p></div>');
}
希望这对在那里的人有所帮助。
评论
我可以确认kevinlearynet的解决方案可用于W3 Total Cache版本0.9.2.4。升级后,我的插件坏了,这很有效。谢谢!保罗
–user9177
2011年10月4日在18:55
我正在尝试从命令行运行它。请问您如何加载W3_Plugin_TotalCacheAdmin类?我试图要求wp-load.php无效。
–adamdport
2014年2月26日在22:56
#5 楼
以上都不适合我的插件。然而,这工作!确认适用于w3tc的0.9.2.4版本。if (function_exists('w3tc_dbcache_flush')) { w3tc_dbcache_flush(); }
我做了一个
“
$ wpdb-> get_results(” SELECT
sb_settings
。f_fb_app_id
,sb_settings
。f_fb_secret
来自sb_settings
“); ”
,并且感到惊讶的是,每次f_fb_secret和f_fb_app_id的值都相同。显然是w3tc缓存了查询结果。因此,我在sb_settings表的修改页面中添加了dbcache刷新。
如果要清除页面缓存,则只需使用w3tc_pgcache_flush即可。
评论
我想请拒绝投票的人说他为什么拒绝投票。我的答案有什么问题吗?
–艾琳
13年4月12日在8:19
这对我有用:if(function_exists('w3tc_flush_all')){w3tc_flush_all();您可以在w3-total-cache-api.php中找到其他功能
– P.O.W.
20 Dec 9'在15:24
#6 楼
使用此代码段来确保无论缓存是打开还是关闭,PHP都可以运行。是的,您必须编写/调用函数两次。<!-- mfunc echo 'caching ON'; --><?php echo 'caching OFF'; ?><!-- /mfunc -->
(我认为)这是这样工作的:
mfunc条件替换php标签。
如果关闭缓存,则mfunc注释中的php将以HTML注释的形式出现在您的标记中。
<!-- mfunc echo "hello?"; -->
请记住这一点,这取决于您对人们看到您的PHP的满意程度(仅在关闭缓存时发生)。
评论
您能否明确定义如何实例化$ w3_plugin_totalcache对象?
–adamdport
2014-2-27 15:35
部分有用,您如何实例化该变量?
–thephpdev
17年1月23日在12:29