WordPress internen Cache bei neuem Eintrag löschen

29. Mai 2012 | Ca. 4 Minuten Lesedauer

Wer wie ich, die WordPress-interne Caching-Option („Transients API“) nutzt, für den habe ich heute vielleicht einen kleinen aber nützlichen Tipp, bzw. Hack. Auf der Seite der Freiwilligen Feuerwehr Schieder-Schwalenberg, die ich zwischen den Jahren neu gemacht habe, werden die Beitragsarchive über die Transients API gecached. Da dort nicht besonders häufig Artikel eingestellt werden, habe ich […]

Wer wie ich, die WordPress-interne Caching-Option („Transients API“) nutzt, für den habe ich heute vielleicht einen kleinen aber nützlichen Tipp, bzw. Hack.

Auf der Seite der Freiwilligen Feuerwehr Schieder-Schwalenberg, die ich zwischen den Jahren neu gemacht habe, werden die Beitragsarchive über die Transients API gecached. Da dort nicht besonders häufig Artikel eingestellt werden, habe ich die Speicherdauer für den Cache auf 6 Stunden gestellt.

Wird vor Ablauf dieser 6 Stunden ein Artikel eingestellt, dann taucht dieser allerdings nicht im Beitragsarchiv auf. Das kann zu Verwirrungen bei den Besuchern führen, bisher hat sich deshalb aber noch keiner gemeldet…

Mit dem Hinzufügen eines kleinen Hooks lässt sich das Problem lösen.

// Caches loeschen, wenn ein Post erstellt wird
// Gefunden bei Florian Meier - www.flomei.de
function delete_cache_after_publishing_new()  {
delete_transient('archiv_nachrichten_links');
delete_transient('archiv_nachrichten_rechts');
delete_transient('archiv_einsaetze_links');
delete_transient('archiv_einsaetze_rechts');
}
add_action('publish_post','delete_cache_after_publishing_new')

Dieser Code muss in die functions.php des genutzten Themes eingebunden werden und arbeitet dann vollautomatisch, d.h. die Archive für Nachrichten und Einsätze werden gelöscht und durch den nächsten Besucher dann aktualisiert wieder angelegt.

delete_transient($transient);

Ist dabei die Funktion, die einen gespeicherten Datensatz (als String übergeben) aus dem Cache löscht. Mehr Infos zur Funktion gibts im WordPress Codex. Im Hook müssen natürlich die spezifischen Namen angegeben werden, da irgendwo set_transient() genutzt wird, lassen sich die aber leicht rausfinden…

add_action($tag, $function_to_add, $priority, $accepted_args);

Das setzt entsprechend einen Hook (siehe WP Codex), im Beispiel auf die „publish_post“-Funktion, die aufgerufen wird, wenn ein neuer Artikel publiziert wird. Die beiden letzten Parameter sind in diesem Beispiel nicht relevant.

Ich nutze das auf einer anderen Seite mit höherem Artikeldurchsatz ebenfalls und das klappt sehr gut.

Vielleicht kann es dem ein oder anderen ja helfen.