W3总缓存-以编程方式刷新缓存


21

我正在WordPress中建立类似Digg的网站。

在安装W3 Total Cache之后,我注意到某些元素(例如每个帖子的投票数(和选民ID))被缓存,即使它们不应该被缓存(至少在用户对文章进行投票之后也是如此)。我认为不可能阻止页面中的特定元素被缓存(或者是?),所以我想到了以编程方式触发页面缓存刷新。

有什么建议么?

Answers:


21

如果您要刷新缓存,则可以执行以下操作:该插件具有用于该功能的功能

<?php 

flush_pgcache()  //page cache
flush_dbcache()  // database cache
flush_minify()  // minify cache
flush_all() //all caches

?>

而您只需要这样称呼它:

<?php 
 $w3_plugin_totalcache->flush_all();
?>

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


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

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

10

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年

@ user1567您可能与打开/关闭<?php ?>标签不匹配。我还没有使用过这些,所以没有实用的代码片段来显示。
罗斯特2011年

一方面,我想在不缓存的情况下加载functions.php。functions.php中的以下代码触发了以上错误:<?php <!-mclude-> require_once(functions2.php)<!-/ mclude->?>代码有什么问题?
user1567 2011年

1
@ user1567根据示例,它应该类似于?><!-- mclude -->functions2.php<!-- /mclude --><?php(我认为:)
Rarst 2011年

无法启动片段缓存。这里介绍我的问题:stackoverflow.com/questions/31125413/...
JackTheKnife

10

要在w3tc v0.9.3中通过帖子ID刷新单个页面,我发现这可行:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}

1
您将此代码放在哪里?看起来它运行在每个页面加载(针对该ID)上。有没有办法防止完全缓存?
s_ha_dum 2014年

@s_ha_dum您能找出我们可以使用哪个钩子使用此代码吗?
Prafulla Kumar Sahu

如果自定义代码/插件附加到的事件在插件加载后执行(通常是这种情况),则不需要额外的钩子。所有可用功能均在w3-total-cache-api.phpW3TC的插件目录中。
沃尔夫

谢谢您,这对我现在有所帮助,在2018年12月。一旦客户端访问了某个页面(当代理可用时将显示设置页面),我需要一种刷新主页缓存的方法。这对于特定页面非常有用,但是如果有一个函数像“清除所有缓存”那样刷新所有缓存,那就太好了!
约旦·卡特

9

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。它打破了我的插件,在升级后,这个工作的享受。谢谢!保罗

2
我正在尝试从命令行运行它。我可以问一下如何加载W3_Plugin_TotalCacheAdmin类吗?我试图要求wp-load.php无效。
adamdport 2014年

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_secretFROM sb_settings”);“,感到惊讶的是,每次f_fb_secret和f_fb_app_id的值都相同。显然是w3tc缓存了查询结果。因此,我在sb_settings表的修改页面中添加了dbcache flush。

如果您想清除页面缓存,则只需使用w3tc_pgcache_flush即可。


我想请拒绝投票的人说他为什么拒绝投票。我的答案有什么问题吗?
Elrinth 2013年

0

使用此代码段可确保无论缓存是打开还是关闭,PHP都可以运行。是的,您必须编写/调用函数两次。

<!-- mfunc echo 'caching ON'; --><?php echo 'caching OFF'; ?><!-- /mfunc -->


(我认为)这是这样的:

  • mfunc条件替换 php标签。
  • 如果关闭缓存,则mfunc注释中的php将以HTML注释的形式出现在您的标记中。<!-- mfunc echo "hello?"; -->请记住这取决于您对人们看到您的PHP的满意程度(仅在关闭缓存时才会发生)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.