Erste Schritte mit der WordPress Transient API, Teil 2

Im ersten Beitrag dieser Serie haben wir definiert, worum es sich bei der API handelt, wie sie sich von der Einstellungs-API unterscheidet und einige allgemeine Aufrufe, die wir an die API richten können. In diesem Beitrag werfen wir einen Blick auf eine praktische Implementierung der API und auf den Umgang mit einigen Besonderheiten, die mit dem Umgang mit abgelaufenen Daten einhergehen.

Die WordPress Transients-API ist ein mächtiger (aber wirklich einfach zu bedienender) Aspekt der WordPress-API. Im Allgemeinen ist es sehr einfach, Daten mit Ablaufzeit zu speichern, und es ist wirklich einfach, verschiedene Caching-Plugins zu nutzen, um die Geschwindigkeit Ihrer Website letztendlich zu erhöhen.


Das Plugin einrichten

Für die Zwecke dieses Plugins erstellen wir ein einfaches Widget, das die Top-Kommentatoren eines Blogs aller Zeiten auflistet. Das Ziel des Plugins ist es, es schlank zu halten, damit wir die Transienten-Funktionalität des Plugins hervorheben können.

Beachten Sie, dass alle Dateien des Plugins jederzeit von GitHub abgerufen werden können. Erstellen Sie in der Zwischenzeit ein Verzeichnis mit dem Namen "top-commenters-cached" und stellen Sie sicher, dass es die folgende Verzeichnisstruktur hat:

Wenn Sie kein Interesse an der Lokalisierung des Plugins haben, können Sie das Verzeichnis 'lang' aus dem Plugin lassen. An diesem Punkt können wir mit dem Schreiben des Widgets beginnen.


Grundlegende Funktionalität

Das Plugin ist einfach. Es sollte?

  • Erlauben Sie dem Benutzer, dem Widget einen benutzerdefinierten Wert zu geben
  • Rufen Sie die zehn beliebtesten Kommentatoren des Bloglebens ab

Leicht genug. Hier ist der Code für das grundlegende Plugin. Beachten Sie, dass es im gesamten Kommentar kommentiert ist, also lesen Sie es einmal durch, um zu verstehen, was wir tun. Wenn Sie mit der Widget-API nicht vertraut sind, vergessen Sie nicht, unseren WordPress Widget Boilerplate-Post zu lesen.

 Klasse Top_Commenters_Cached erweitert WP_Widget const name = 'Top Commenters (Cached!)'; const locale = 'top-commenters-cached-locale'; const slug = 'Top-Kommentatoren im Cache'; / * ------------------------------------------------ --*/ /* Konstrukteur /*----------------------------------------- --------- * / / ** * Der Widget-Konstruktor. Gibt den Klassennamen und die Beschreibung an, instanziiert * das Widget, lädt Lokalisierungsdateien und enthält die erforderlichen Skripts und * Stile. * / function Top_Commenters_Cached () $ widget_opts = array ('classname' => self :: name, 'description' => __ ('Ein Plugin, mit dem die WordPress Transients-API für eine Envato-Blogserie demonstriert wird.', self :: locale)); $ this-> WP_Widget (self :: slug, __ (self :: name, self :: locale), $ widget_opts); load_plugin_textdomain (self :: locale, false, dirname (plugin_basename (__FILE__)). '/ lang /');  // Endkonstruktor / * --------------------------------------- ------- * / / * API-Funktionen / * ----------------------------------- --------------- * / / ** * Gibt den Inhalt des Widgets aus. * * @args Das Array von Formularelementen * @instance * / Funktions-Widget ($ args, $ instance) extract ($ args, EXTR_SKIP); echo $ before_widget; $ widget_title = leer ($ instance ['widget_title'])? ": apply_filters ('widget_title', $ instance ['widget_title']); $ commenters = $ this-> query_for_commenters (); // Zeigt das Widget include an (WP_PLUGIN_DIR) . '/'. self :: slug. '/views/widget.php'); echo $ after_widget; // Widget beenden / ** * Verarbeitet die zu speichernden Optionen. * * @new_instance Die vorherige Instanz von Werten vor dem Update. * @alt_instance Die neue Instanz von Werten, die über das Update generiert werden sollen. * / Funktionsaktualisierung ($ new_instance, $ old_instance) $ instance = $ old_instance; $ instance ['widget_title'] = $ this-> strip ($ new_instance, 'widget_title'); return $ instance; // end widget / ** * Erzeugt das Verwaltungsformular für das Widget. * * @instance Das Array mit Schlüsseln und Werten für das Widget. * / Funktionsformular ($ Instanz) $ instance = wp_parse_args ((array) $ instance, array ('widget_title' => ")); $ widget_title = $ this-> strip ($ instance, 'widget_title'); // Zeigt das Admin-Formular include an (WP_PLUGIN_DIR. '/'. Self :: slug. '/Views/admin.php');  // Endformular / * --------------------------------------- ------- * / / * Private Funktionen / * ----------------------------------- --------------- * / / ** * Ruft die wöchentlichen Top-Kommentatoren der letzten Woche ab und speichert die Werte im Cache. * Wenn der Cache leer ist, fordert die Funktion Informationen von der Datenbank an und speichert sie im Cache. * / private Funktion query_for_commenters () $ commenters = null; // Abfrage der Datenbank nach den Top-Kommentatoren global $ wpdb; $ commenters = $ wpdb-> get_results ("select count (comment_author)) als comments_count, comment_author, comment_type aus $ wpdb-> comments wobei comment_type! = 'pingback' und comment_author! = 'und comment_approved =' 1 'gruppieren comment_author desc LIMIT 10 "); Rückgabe von $ commenters // Ende der Abfrage_der_Kommentare / * ----------------------------- ----------------- * / / * Hilfsfunktionen / * ------------------------- ------------------------- * / / ** * Komfortmethode zum Entfernen von Tags und Schrägstrichen aus dem Inhalt * einer Formulareingabe. * * @ obj Die Instanz des Argument-Arrays * @title Der Titel des Elements, aus dem Tags und Schrägstriche entfernt werden. * / private Funktionsstreifen ($ obj, $ title) return strip_tags (striplashes ($ obj [$ title])) ); // end strip // end class add_action ('widgets_init', create_function (", 'register_widget (" Top_Commenters_Cached ");')); ?>

Als Nächstes betrachten wir die Ansicht des Widgets. Dies ist der Teil des Plugins, der für die Anzeige der Kommentarliste verantwortlich ist. Es zeigt den Titel des Widgets an (sofern definiert) und durchläuft die Ergebnisse, um ein neues Listenelement zu erstellen.

  0) ?> 

'; foreach ($ commenter als $ commenter) $ comment_list. = '
  • '; // tatsächlich den Namen des Kommentars und die Anzahl der Kommentare ausgeben $ comment_list. = $ commenter-> comment_author; $ comment_list. = '('. $ commenter-> comments_count. ')'; $ comment_list. = '
  • '; // end foreach $ comment_list. = ''; echo $ comment_list; ?>

    Offensichtlich haben wir einen Teil des Codes ausgelassen. Nämlich das Admin-Panel. Es sollte Benutzern einfach ermöglichen, einen Titel für ihr Widget einzugeben:

     

    Denken Sie daran, dass Sie den vollständigen Quellcode anzeigen und das Plugin aus seinem GitHub-Repository herunterladen können.


    Zwischenspeichern der Daten

    An diesem Punkt haben wir ein funktionales Plugin; Wir speichern jedoch noch keine Daten. Der intensivste Teil dieses Plugins ist, wenn wir die Datenbank abfragen und die Ergebnisse der Abfrage das sind, was wir eigentlich zwischenspeichern möchten, also machen wir das.

    Suchen Sie die Abfrage im Code:

     global $ wpdb; $ commenters = $ wpdb-> get_results ("select count (comment_author)) als comments_count, comment_author, comment_type aus $ wpdb-> comments wobei comment_type! = 'pingback' und comment_author! = 'und comment_approved =' 1 'gruppieren nach comment_author desc LIMIT 10 ");

    Und lassen Sie uns die Ergebnisse 12 Stunden mit der Transienten-API speichern:

     set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12);

    Ganz einfach, richtig? Natürlich sind wir noch nicht fertig.


    Rufen Sie die Daten ab

    Sobald der Übergang eingestellt ist, müssen wir den Übergang abrufen können. Lassen Sie uns das jetzt einrichten:

     private Funktion query_for_commenters () return get_transient ('top_commenters_cached');  // Ende der Abfrage_der_Kommentare

    Das ist alles dazu!

    Aber warten Sie, wenn Sie sich an den ersten Beitrag der Serie erinnern, verfallen die Transienten tatsächlich, so dass der Transient nicht garantiert abgerufen werden kann.


    Fehlende Daten finden

    Unabhängig davon, was Sie tun, erfolgt das Abrufen abgelaufener Daten im Allgemeinen nach demselben Verfahren:

    • Überprüfen Sie die Existenz des Transienten
    • Wenn es existiert, verwenden Sie es
    • Wenn es nicht existiert, legen Sie es fest und rufen Sie es ab

    Machen wir das im Rahmen unseres Plugins:

     private Funktion query_for_commenters () $ commenters = null; // Prüfen Sie, ob der Übergang existiert. setze es, wenn es abgelaufen ist oder fehlt if (! get_transient ('top_commenters_cached')) // frage die Datenbank nach den Top-Kommentatoren ab global $ wpdb; $ commenters = $ wpdb-> get_results ("select count (comment_author)) als comments_count, comment_author, comment_type aus $ wpdb-> comments wobei comment_type! = 'pingback' und comment_author! = 'und comment_approved =' 1 'gruppieren nach comment_author desc LIMIT 10 "); // Speichern des Ergebnisses set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12); // end, wenn // Transient jetzt garantiert vorhanden ist, geben Sie also get_transient ('top_commenters_cached zurück '); // Abfrage_für_Kommentare beenden

    Fazit

    Nicht so schlimm, richtig?

    Wie Sie sehen können, erfordert die Arbeit mit der Transients-API wenig mehr als zu wissen, wann sie zu verwenden ist und welche Funktionen verfügbar sind. Meiner Meinung nach ist dies einer der mächtigsten Aspekte der WordPress-API.

    Wenn Sie große Datenmengen abrufen, nach einer Möglichkeit suchen, Daten für eine Aktualisierung abzulehnen, oder einfach nur die Zwischenspeicherung von Plugins nutzen möchten, sollten Sie die Transients-API in Betracht ziehen.