Widget – Speichern und aktualisieren Sie Daten

Was ist der beste Weg, um Daten zu speichern? database, Cache usw.?

Ich möchte ein Widget erstellen, das einige Daten von der API zeigt, aber ich möchte nicht jedes Mal wegen Beschränkungen API aufrufen. Ich möchte API alle 3 Stunden oder einmal täglich aufrufen und Daten von API und Zeitstempel speichern, wenn API aufgerufen wurde.

Wie es geht?

Entschuldigung, habe keinen Code zum Anzeigen. Es ist eher theoretische Frage

Solutions Collecting From Web of "Widget – Speichern und aktualisieren Sie Daten"

Sie möchten wahrscheinlich WordPress Transienten verwenden, da sie sowohl mit den Daten als auch mit dem Zeitstempel / Ablauf umgehen können.

Sie können auch den Deal mit WordPress Transients von CSS Tricks, die auch einige gute Informationen hat.

Für solche Zwecke ist Transient API die richtige Wahl.

Von der Codex-Seite:

Die transiente API bietet eine einfache und standardisierte Möglichkeit, zwischengespeicherte Daten in der database vorübergehend zu speichern, indem sie einen benutzerdefinierten Namen und einen Zeitrahmen erhält, nach dem sie abläuft und gelöscht wird.

Es ist auch zu erwähnen, dass Transienten durch das Caching von Plugins inhärent beschleunigt werden, wo normale Optionen nicht sind. Ein Memcached-Plugin zum Beispiel würde WordPress veranlassen, flüchtige Werte im schnellen Speicher anstatt in der database zu speichern. Aus diesem Grund sollten Transienten verwendet werden, um Daten zu speichern, die voraussichtlich ablaufen oder die jederzeit ablaufen können. Es sollte auch niemals angenommen werden, dass Transienten in der database enthalten sind, da sie möglicherweise gar nicht dort gespeichert werden.

Beispielcode

Wie man Transienten einstellt

set_transient( $transient, $value, $expiration );

$ vergänglich

(String) Vorübergehender Name. Voraussichtlich nicht SQL-Escape. Muss 172 Zeichen oder weniger lang sein.

$ Wert

(array | object) Zu speichernde Daten, entweder eine reguläre Variable oder ein Array / Objekt. Die API wird die Serialisierung komplexer Daten für Sie übernehmen.

$ Ablaufdatum

(Ganzzahl) Das Maximum von Sekunden, um die Daten vor der Aktualisierung zu behalten. Transienten können vor dem $ -Ablauf ablaufen (aufgrund von externen Objekt-Caches oder database-Upgrades), werden aber ihren Wert nach dem $ -Ablauf nicht zurückgeben.

Um beispielsweise das $ special_query_results-Objekt für 12 Stunden zu speichern, würden Sie Folgendes tun:

set_transient( 'special_query_results', $special_query_results, 60*60*12 );

Wie man vergänglich wird

get_transient( $transient );

$ Transient der einzigartige Slug, der beim Speichern des Transienten mit set_transient () verwendet wurde.

In unserem Fall könnten wir unsere speziellen Abfrageergebnisse abrufen mit:

get_transient( 'special_query_results' );

Wenn der Transient nicht existiert oder abgelaufen ist, gibt get_transient() false . Dies sollte mit dem Identity-Operator (===) anstelle des normalen Gleichheitsoperators (==) überprüft werden, da ein ganzzahliger Wert von Null (oder andere “leere” / “falsche” Daten) die gewünschten Daten sein können lagern. Wegen dieses “falschen” Wertes sollten Transienten nicht verwendet werden, um einfache boolesche Werte (wahr / falsch) zu halten. Setzen Sie sie in ein Array oder konvertieren Sie sie stattdessen in ganze Zahlen.

Beispielverwendung:

 if ( false === ( $value = get_transient( 'value' ) ) ) { // this code runs when there is no valid transient set } 

Der obige Code wird die Transiente erhalten und in $value . Der Code innerhalb des if-Blocks wird nur ausgeführt, wenn kein gültiger Transient dafür verfügbar ist. Dies ist typischerweise eine Methode, um den Übergangswert durch andere Mittel neu zu erzeugen. Denken Sie daran, dass es möglich ist, dass ein Transient vor der normalen Ablaufzeit nicht verfügbar ist.

Vollständiges Beispiel

 function wp1707_get_my_api_data ( $update = false ){ // Checking if our transient is available. $my_api_data = get_transient( 'wp1707_my_api_data' ); // Is transient data not available or do we want to force the update? if ( empty( $my_api_data ) || !$update) { // Get the data from API $my_api_data = call_to_my_api(); // Now let's set that data as transient and store it for 3hours set_transient( 'wp1707_my_api_data', $my_api_data, 3 * HOUR_IN_SECONDS ); } // return $my_api_data; } 

Vorsicht bei der Verwendung der Transienten-API

  1. Transienten sind zeitlich gebunden, können jedoch vor der von Ihnen festgelegten Ablaufzeit ablaufen. Stellen Sie immer sicher, dass Sie in Ihrem Code einen Fallback haben.
  2. Wenn Caching-Plugins / Mechanismen verwendet werden, werden Transienten alle außerhalb der database gespeichert. Niemals annehmen oder erwarten, dass Transienten in der database gespeichert werden.
  3. Stellen Sie sicher, dass der von Ihnen verwendete Slug eindeutig ist. Verallgemeinerte Slugs wie my_api_data sind schlechte Design-Entscheidungen. Am besten wp1707_wcf_my_api_data Sie die Slugs mit einem eindeutigen Präfix / Suffix wie wp1707_wcf_my_api_data . Dies stellt sicher, dass andere schlecht designte Plugins / Designs Ihre transienten Daten nicht überschreiben.
  4. Die Transienten-API ist nicht für jedes Szenario geeignet. Lesen Sie diesen tollen Beitrag von Pressjitsu – Cache nicht alles mit Transienten
  5. Dieser Artikel von CSS-Tricks enthält einige gute Hinweise zu Vor- und Nachteilen mit Beispielcode.