web-dev-qa-db-fra.com

Cache total W3 - actualisation du cache par programmation

Je construis un site Web similaire à Digg dans WordPress.

Après l'installation de W3 Total Cache, j'ai remarqué que certains éléments, tels que le nombre de votes (et d'identifiants d'électeurs) par publication, sont mis en cache, même s'ils ne devraient pas l'être (du moins pas après qu'un utilisateur a voté pour un article). Je suppose qu'il n'est pas possible d'empêcher la mise en cache d'éléments spécifiques dans une page (ou s'agit-il?), Alors j'ai pensé à déclencher l'actualisation du cache de page par programme.

Aucune suggestion?

21
user1567

si vous voulez vider le cache, vous pouvez le faire: le plugin a des fonctions pour ça

<?php 

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

?>

et vous avez juste besoin de l'appeler comme ceci:

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

et c’est essentiellement la réponse à la question dans le titre "Mise à jour du cache par programmation"

20
Bainternet

Pour vider une seule page par identifiant de poste dans w3tc v0.9.3, j'ai trouvé que cela fonctionnait:

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

W3 Total Cache prend en charge la mise en cache de fragments. De la 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 -->
10
Rarst

La solution de Bainternet ne semblait pas fonctionner pour moi.

J'utilise avec succès cet extrait de code alternatif dans un plug-in, chargé à l'action 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>');
}

Espérons que cela aide quelqu'un là-bas.

9
Kevin Leary

Rien de ce qui précède n'a fonctionné pour moi dans mon plugin. Cependant cela a fonctionné! Confirmé de travail pour la version 0.9.2.4 de w3tc.

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

J'ai fait un "$ wpdb-> get_results (" SELECT sb_settings.f_fb_app_id, sb_settings.f_fb_secret FROM sb_settings ");" et j'ai été surpris que les valeurs f_fb_secret et f_fb_app_id soient identiques à chaque fois. C'était évidemment le w3tc qui mettait en cache le résultat de la requête. J'ai donc ajouté une séquence dbcache dans ma page de modification pour la table sb_settings.

Si vous souhaitez vider le cache de la page, utilisez simplement w3tc_pgcache_flush à la place.

5
Elrinth

Utilisez cet extrait pour vous assurer que votre PHP est exécuté, que la mise en cache soit activée ou non. Oui, vous devez écrire/appeler votre fonction deux fois.

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


(Je pense) voici comment cela fonctionne:

  • Les conditions mfunc replace php.
  • Si la mise en cache estOFF, php dans les commentaires mfunc apparaît dans votre balisage sous forme de commentaires HTML. <!-- mfunc echo "hello?"; --> Gardez cela à l'esprit en fonction de votre joie de voir votre PHP (uniquement lorsque la mise en cache est désactivée).
0
Dominic