W3 total cache – cache refresh programmatically

I am building a Digg like website in WordPress.

After installing W3 Total Cache, I noticed certain elements such as number of votes (and voters ids) per post are cached even though they shouldn’t be (at least not after a user votes for an article).
I assume it is not possible to prevent specific elements in a page from being cached (or is it?), so I thought of triggering page cache refresh programmatically.

Read More

Any suggestions?

Related posts

Leave a Reply

6 comments

  1. if you want to flush the cache you can do that:
    the plugin has functions for that

    <?php 
    
    flush_pgcache()  //page cache
    flush_dbcache()  // database cache
    flush_minify()  // minify cache
    flush_all() //all caches
    
    ?>
    

    and you just need to call it like this:

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

    and that is basically the answer to the question in the title
    “cache refresh programmatically”

  2. Bainternet’s solution didn’t seem to work for me.

    I’m successfully using this alternative snippet within a plugin, loaded at the admin_init action:

    // 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>');
    }
    

    Hopefully this helps someone out there.

  3. To flush a single page by post id in w3tc v0.9.3 I found this worked:

    if (function_exists('w3tc_pgcache_flush_post')){
     w3tc_pgcache_flush_post($post_id);
    }
    
  4. W3 Total Cache supports fragment caching. From FAQ:

    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 -->
    
  5. None of the above worked for me in my plugin. However this worked! Confirmed working for version 0.9.2.4 of w3tc.

    if (function_exists('w3tc_dbcache_flush')) { w3tc_dbcache_flush(); }
    

    I did a

    $wpdb->get_results( “SELECT sb_settings.f_fb_app_id,sb_settings.f_fb_secret FROM sb_settings” );

    and was surprised the values f_fb_secret and f_fb_app_id was the same every time. It was obviously the w3tc cacheing the result of the query. So I added a dbcache flush in my modify page for the sb_settings table.

    Should you want to clear page cache, then just use w3tc_pgcache_flush instead.

  6. Use this snippet to make sure your PHP runs regardless of whether caching is on or off. Yes, you have to write/call your function twice.

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


    (I think) this is how it works:

    • The mfunc conditionals replace php tags.
    • If caching is OFF, php inside mfunc comments appear in your markup as a HTML comments. <!-- mfunc echo "hello?"; --> Keep this in mind depending on how happy you are for people to see your PHP (only happens when caching is off).