W3-Gesamtcache - Cache-Aktualisierung programmgesteuert [geschlossen]

21

Ich erstelle eine Digg-ähnliche Website in WordPress.

Nach der Installation von W3 Total Cache habe ich festgestellt, dass bestimmte Elemente wie die Anzahl der Stimmen (und die Wähler-IDs) pro Beitrag zwischengespeichert werden, obwohl dies nicht der Fall sein sollte (zumindest nicht, nachdem ein Benutzer für einen Artikel gestimmt hat). Ich gehe davon aus, dass es nicht möglich ist, zu verhindern, dass bestimmte Elemente in einer Seite zwischengespeichert werden (oder?), Weshalb ich daran gedacht habe, die Aktualisierung des Seiten-Cache programmgesteuert auszulösen.

Irgendwelche Vorschläge?

user1567
quelle

Antworten:

21

Wenn Sie den Cache leeren wollen, können Sie das tun: Das Plugin hat Funktionen dafür

<?php 

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

?>

und du musst es einfach so nennen:

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

und das ist im Grunde die Antwort auf die Frage im Titel "Cache programmgesteuert aktualisieren"

Bainternet
quelle
12
Können Sie bitte explizit definieren, wie Sie das Objekt $ w3_plugin_totalcache instanziiert haben?
Adamdport
3
Teilweise hilfreich, wie haben Sie diese Variable instanziiert?
thephpdev
10

W3 Total Cache unterstützt Fragment-Caching. Aus 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
quelle
Danke Rast. Wenn ich jedoch eines der oben genannten Beispiele verwende, wird ein Fehler
angezeigt.
@ user1567 Wahrscheinlich stimmen die <?php ?>Tags zum Öffnen / Schließen nicht überein . Ich hatte diese noch nicht benutzt, also habe ich keinen praktischen Ausschnitt, den ich zeigen könnte.
Rarst
Zum einen möchte ich functions.php laden, ohne es zu zwischenspeichern. Der folgende Code in functions.php hat den obigen Fehler ausgelöst: <? Php <! - mclude -> require_once (functions2.php) <! - / mclude ->?> Was ist mit dem Code falsch?
user1567
1
@ user1567 laut beispiel sollte es so etwas sein ?><!-- mclude -->functions2.php<!-- /mclude --><?php(glaube ich :)
Rarst 17.01.11
Fragment-Caching funktioniert nicht. Mein hier beschriebenes Problem: stackoverflow.com/questions/31125413/…
JackTheKnife
10

So leeren Sie eine einzelne Seite mit der Post-ID in w3tc v0.9.3:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
user806052
quelle
1
Wo würdest du diesen Code platzieren? Dies sieht so aus, als würde es bei jedem Seitenaufruf (für diese ID) ausgeführt. Gibt es keine Möglichkeit, ein vollständiges Caching zu verhindern?
s_ha_dum
@s_ha_dum Könnten Sie herausfinden, mit welchem ​​Hook wir diesen Code verwenden können?
Prafulla Kumar Sahu
Zusätzliche Hooks sind nicht erforderlich, wenn das Ereignis, an das Ihr benutzerdefinierter Code / Plugin angehängt ist, ausgeführt wird, nachdem Plugins geladen wurden. Dies ist normalerweise der Fall. Alle verfügbaren Funktionen befinden sich im w3-total-cache-api.phpPlugin-Verzeichnis des W3TC.
Walf
Vielen Dank, das war jetzt im Dezember 2018 hilfreich für mich. Ich brauchte eine Möglichkeit, den Cache der Homepage zu leeren, sobald der Client eine bestimmte Seite besucht hat (eine Einstellungsseite, die angezeigt wird, wenn ein Agent verfügbar ist). Dies ist für bestimmte Seiten sehr nützlich, aber es wäre schön, wenn es eine Funktion gäbe, die ALLE Caches löscht, wie dies beim Löschen aller Caches der Fall ist!
Jordan Carter
9

Bainternets Lösung schien für mich nicht zu funktionieren.

Ich verwende dieses alternative Snippet erfolgreich in einem Plugin, das bei der Aktion admin_init geladen wird :

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

Hoffentlich hilft das jemandem da draußen.

Kevin Leary
quelle
Ich kann bestätigen, dass die Lösung von KevinLearynet mit W3 Total Cache Version 0.9.2.4 funktioniert. Nach diesem Upgrade ist mein Plugin kaputt gegangen, und das ist ein Vergnügen. Vielen Dank! Paul.
2
Ich versuche dies von der Kommandozeile aus auszuführen. Kann ich fragen, wie Sie die W3_Plugin_TotalCacheAdmin-Klasse geladen haben? Ich habe versucht, wp-load.php ohne Erfolg zu benötigen.
Adamdport
5

Keines der oben genannten Probleme hat in meinem Plugin funktioniert. Das hat aber geklappt! Bestätigt, für Version 0.9.2.4 von w3tc zu arbeiten.

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

Ich habe ein "$ wpdb-> get_results (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings");" durchgeführt und war überrascht, dass die Werte f_fb_secret und f_fb_app_id jedes Mal gleich waren. Es war offensichtlich der W3TC-Cache, der das Ergebnis der Abfrage zwischengespeichert hat. Deshalb habe ich auf meiner Änderungsseite einen Dbcache-Flush für die Tabelle sb_settings hinzugefügt.

Wenn Sie den Seiten-Cache löschen möchten, verwenden Sie stattdessen einfach w3tc_pgcache_flush.

Elrinth
quelle
Ich möchte, dass der Downvoter sagt, warum er downvotet. Stimmt etwas mit meiner Antwort nicht?
Elrinth
0

Verwenden Sie dieses Snippet, um sicherzustellen, dass Ihr PHP ausgeführt wird, unabhängig davon, ob das Caching aktiviert oder deaktiviert ist. Ja, Sie müssen Ihre Funktion zweimal schreiben / aufrufen.

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


(Ich denke) so funktioniert es:

  • Die mfunc-Bedingungen ersetzen PHP-Tags.
  • Wenn Caching ist OFF , php innerhalb MFUNC Kommentare erscheinen in Ihrem Markup als HTML - Kommentare. <!-- mfunc echo "hello?"; -->Denken Sie daran, je nachdem, wie glücklich Sie sind, dass die Benutzer Ihr PHP sehen (dies geschieht nur, wenn das Caching deaktiviert ist).
Dominic
quelle