it-swarm.com.de

W3 total cache - Cache wird programmgesteuert aktualisiert

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 abgestimmt 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?

21
user1567

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"

20
Bainternet

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);
}
10
user806052

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 -->
10
Rarst

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

Ich verwende dieses alternative Snippet erfolgreich in einem Plugin, das über die 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.

9
Kevin Leary

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_secret FROM 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.

5
Elrinth

Verwenden Sie dieses Snippet, um sicherzustellen, dass Ihr PHP ausgeführt wird, unabhängig davon, ob die Zwischenspeicherung 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 replace php-Tags.
  • Wenn die ZwischenspeicherungAUSist, werden PHP-Kommentare in Ihrem Markup als HTML-Kommentare angezeigt. <!-- mfunc echo "hello?"; --> Denken Sie daran, je nachdem, wie glücklich Sie sind, dass die Leute Ihr PHP sehen (dies geschieht nur, wenn die Zwischenspeicherung deaktiviert ist).
0
Dominic