WordPress besitzt eine API die explizit zum zeitlich gesteuerten Speichern von Daten gedacht ist - die Transient API. Diese API ist also für das Cachen von Daten in der Datenbank gedacht und recht einfach einzusetzen - dies sollte man auch tun.
Die Transient API ist nicht nur für Entwickler interessant, wie das folgende kleine Beispiel zeigt, welches die Daten der Tag-Wolke innerhalb der Datenbank speichert und so typischerweise im Theme Verwendung finden könnte.
Im ersten Schritt holen wir dazu den Eintrag aus der Datenbank, der als Inhalt für die Tag-Wolke dienen soll - $tag_cloud = get_transient( 'tag_cloud' );. Wenn dieser Eintrag fehlt schlägt, dann wird die Tag-Wolke normal über den Template Tag wp_tag_cloud() erzeugt. Einziger Unterschied gegenüber der "normalen" Verwendung im Template des Theme, die direkte Ausgabe ist auf FALSE, da wir sie in einer Variable benötigen.
Im folgenden setzen wir nun den Eintrag in der Datenbank mit diesem Inhalt und geben einen Zeitwert mit: set_transient($transient, $value, $expiration);. Der Zeitwert, Parameter drei, wird in Sekunden angegeben.
Nun muss lediglich der Wert der Variable ausgegeben werden und fertig; ab nun bekommt die Tag-Wolke ihrer Daten aus dem Cache, der für einen Zeitraum von 12 Stunden existiert und dann neu erstellt wird.
$tag_cloud = get_transient( 'tag_cloud' );
if ( false === $tag_cloud || '' === $tag_cloud ){
$args = array('echo' => false);
$tag_cloud = wp_tag_cloud( $args );
set_transient( 'tag_cloud', $tag_cloud, 60*60*12 );
}
echo $tag_cloud;
Das kleine Beispiel verdeutlicht hoffentlich die Möglichkeiten, die Transient API liefert einige weitere Funktionen, die im Codex sehr schön nachzulesen sind.
Hab das gerade mal versucht, irgendwie haut das nicht hin. Der erste Aufruf klappt noch, doch beim zweiten Aufruf kommt dann einfach nichts mehr. Es wurden auch die Einträge in der wp-options vorgenommen. An was kann das liegen?
@Markus: ich habe mir den Code nochmal angesehen und irgendwie spinnt die Funktione wp_tag_cloud(), die wenn man ihr einen Array mit Werten übergibt, sauber tut, was sie soll und direkte Parameter sorgen für das Problem, die Werte sind nicht da und können dann nicht gespeichert werden. Habe den Code im Artikel angepasst, sollte nun alles klappen.