it-swarm.com.de

Soll ich set_transient oder update_option verwenden?

Ich möchte einige Twitter-API-Daten in WordPress speichern. Nach jeder Stunde möchte ich neue Daten von Twitter abrufen und nur aktualisieren, wenn die Daten erfolgreich von der API abgerufen wurden (manchmal gibt die API einen Fehler aus, in diesem Fall möchte ich die alten Daten weiter verwenden). Soll ich in diesem Fall set_transient oder update_option verwenden?

Wenn ich update_option verwendet habe, kann ich zumindest überprüfen, ob neue Daten verfügbar sind, bevor ich die Option aktualisiere.

Was passiert, wenn ich für eine Stunde set_transient und nach einer Stunde die neuen Daten nicht verfügbar sind, werde ich die gespeicherten Daten verlieren?

5
jay

Ein Transient ist nicht wie ein wp_cron Job, da er sich nach Ablauf einer festgelegten Zeit nicht selbst aktualisiert. Ein Transient wird aktualisiert, wenn versucht wird, auf die Daten zuzugreifen. Wenn Sie tatsächlich ein ungefähr stündliches Update benötigen, müssen Sie wp_cron verwenden, obwohl es in der Praxis möglicherweise nicht viel ausmacht und Sie können einen wp_cron -Job verwenden, um den Transienten zu aktualisieren, wenn Sie möchten.

Um die gestellte Frage zu beantworten: Wenn Sie get_transient ausführen, um Ihren Übergangswert zu überprüfen, wird false zurückgegeben, wenn "der Übergang existiert nicht, keinen Wert hat oder abgelaufen ist" , aber Sie tun es nicht Ich weiß nicht welche, und beim Ausführen von get_transient wird auch delete_optionausgeführt, wenn die Zeitüberschreitung abgelaufen ist . Ich habe überprüft, ob der Transient tatsächlich aus der Datenbank gelöscht wurde, indem ich einen 60-Sekunden-Timeout-Test eingerichtet und die Datenbank selbst auf den Transienten überprüft habe.

Transienten haben im Hinblick auf das Caching einen Vorteil gegenüber normalen Optionen.

Beachten Sie auch, dass Transienten von Natur aus durch das Zwischenspeichern von Plugins beschleunigt werden, während dies bei normalen Optionen nicht der Fall ist. Ein im Speicher befindliches Plugin zum Beispiel würde WordPress veranlassen, vorübergehende Werte nicht in der Datenbank, sondern im schnellen Speicher zu speichern. Aus diesem Grund sollten Transienten zum Speichern von Daten verwendet werden, deren Ablauf erwartet wird oder die jederzeit ablaufen können.

http://codex.wordpress.org/Transients_API

Dies ist auf Ihrer Website möglicherweise nicht besonders wichtig, gilt jedoch im Allgemeinen für die Verwendung der Transients-API. Sie müssen jedoch etwas gegen den Datenverlust unternehmen. So etwas wie...

function get_twit_wpse_94911() {
  $trans = 'test_transient';
  $data = get_option('_transient_'.$trans);
  if (empty($data)) {
    $data = 'Yay Awesome Data'; // default data if you want it
  }
  if (!get_transient($trans)) {
    // check for new information
    // $new = fetch_Twitter_however_you_are_doing_it();
    // check for the integrity of the new data
    // !empty() may not be adequate
    if (!empty($new)) {
      $data = $new;
    }
    set_transient($trans,$data,60*60);
  }
  return get_transient($trans);
}
4
s_ha_dum