我正在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();
?>


,这基本上是标题中的问题的答案
“以编程方式进行缓存刷新”

评论


您能否明确定义如何实例化$ w3_plugin_totalcache对象?

–adamdport
2014-2-27 15:35

部分有用,您如何实例化该变量?

–thephpdev
17年1月23日在12:29

#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_settingsf_fb_app_idsb_settingsf_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的满意程度(仅在关闭缓存时发生)。