Cache total W3 - actualisation du cache par programme [fermé]

21

Je crée un site Web comme Digg dans WordPress.

Après avoir installé W3 Total Cache, j'ai remarqué que certains éléments tels que le nombre de votes (et les identifiants des électeurs) par message sont mis en cache même s'ils ne devraient pas l'être (du moins pas après qu'un utilisateur vote 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 est-ce?), J'ai donc pensé à déclencher le rafraîchissement du cache de page par programme.

Aucune suggestion?

user1567
la source

Réponses:

21

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

<?php 

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

?>

et il vous suffit de l'appeler comme ceci:

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

et c'est fondamentalement la réponse à la question du titre "mise à jour du cache par programmation"

Bainternet
la source
12
Pouvez-vous s'il vous plaît définir explicitement comment vous avez instancié l'objet $ w3_plugin_totalcache?
adamdport
3
En partie utile, comment avez-vous instancié cette variable?
thephpdev
10

W3 Total Cache prend en charge la mise en cache des 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 -->
Rarst
la source
Merci Rast. Mais lorsque j'utilise l'un des exemples ci-dessus, j'obtiens une erreur Erreur d'analyse: erreur de syntaxe, '<' inattendu
user1567
@ user1567 vous avez probablement un décalage avec les <?php ?>balises d' ouverture / fermeture . Je ne les avais pas encore utilisés, alors je n'ai pas d'extrait pratique à montrer.
Rarst
D'une part, je voudrais charger functions.php sans le mettre en cache. Le code suivant dans functions.php a déclenché l'erreur ci-dessus: <? Php <! - mclude -> require_once (functions2.php) <! - / mclude ->?> Quel est le problème avec le code?
user1567
1
@ user1567 selon les exemples, cela devrait ressembler à ?><!-- mclude -->functions2.php<!-- /mclude --><?php(je pense :)
Rarst
Impossible de se mettre en cache de fragments de travail. Mon problème décrit ici: stackoverflow.com/questions/31125413/…
JackTheKnife
10

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

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
user806052
la source
1
Où placeriez-vous ce code? Il semble qu'il s'exécute à chaque chargement de page (pour cet ID). N'y a-t-il aucun moyen d'empêcher la mise en cache complète?
s_ha_dum
@s_ha_dum Pourriez-vous savoir avec quel crochet nous pouvons utiliser ce code?
Prafulla Kumar Sahu
Des hooks supplémentaires ne sont pas nécessaires si l'événement auquel votre code / plugin personnalisé s'attache s'exécute après le chargement des plugins, ce qui est généralement le cas. Toutes les fonctions disponibles se trouvent dans w3-total-cache-api.phple répertoire du plugin du W3TC.
Walf
Merci, cela m'a été utile maintenant en décembre 2018. J'avais besoin d'un moyen de vider le cache de la page d'accueil une fois que le client a visité une certaine page (une page de paramètres à afficher lorsqu'un agent est disponible). C'est très utile pour des pages spécifiques, mais ce serait bien s'il y avait une fonction qui vidait TOUS les caches comme Purge All Caches!
Jordan Carter
9

La solution de Bainternet ne semblait pas fonctionner pour moi.

J'utilise avec succès cet extrait de code alternatif dans un plugin, 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>');
}

J'espère que cela aide quelqu'un là-bas.

Kevin Leary
la source
Je peux confirmer que la solution de kevinlearynet fonctionne avec W3 Total Cache version 0.9.2.4. Il s'est cassé pour mon plugin après cette mise à niveau, et cela fonctionne un régal. Merci! Paul.
2
J'essaie d'exécuter cela à partir de la ligne de commande. Puis-je demander comment vous avez chargé la classe W3_Plugin_TotalCacheAdmin? J'ai essayé d'exiger wp-load.php en vain.
adamdport
5

Rien de ce qui précède n'a fonctionné pour moi dans mon plugin. Mais cela a fonctionné! Fonctionnement confirmé 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_secretFROM sb_settings");" et j'ai été surpris que les valeurs f_fb_secret et f_fb_app_id soient les mêmes à chaque fois. C'était évidemment le w3tc qui mettait en cache le résultat de la requête. J'ai donc ajouté un vidage dbcache dans ma page de modification pour la table sb_settings.

Si vous souhaitez vider le cache des pages, utilisez simplement w3tc_pgcache_flush à la place.

Elrinth
la source
Je voudrais que le downvoter dise pourquoi il a downvoted. Y a-t-il quelque chose de mal dans ma réponse?
Elrinth
0

Utilisez cet extrait pour vous assurer que votre PHP s'exécute, que la mise en cache soit activée ou désactivée. 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 remplacent les balises php.
  • Si la mise en cache est désactivée , les commentaires php dans mfunc apparaissent dans votre balisage en tant que commentaires HTML. <!-- mfunc echo "hello?"; -->Gardez cela à l'esprit en fonction de votre plaisir pour les gens à voir votre PHP (cela ne se produit que lorsque la mise en cache est désactivée).
Dominique
la source