Am Ende dieser Serie stehen zwei weitere Themen zur Verfügung:
Im vorigen Artikel haben wir die Validierung, Desinfektion und Implementierung dieser Funktionalität für die Elemente, die wir im Frontend angezeigt haben, betrachtet. In diesem Artikel setzen wir den Vorgang fort, indem Sie die Informationen in der Datenbank speichern, die Informationen abrufen und im Frontend anzeigen.
Auf dem Weg werden wir uns auch einige der integrierten WordPress-API-Funktionen ansehen, die dazu beitragen sollen, uns dies ein bisschen leichter zu machen, sowie einige Tipps, um unsere Arbeit in der Datenbank zu überprüfen, um zu überprüfen, ob unsere Informationen gespeichert werden genau wie wir es erwarten.
Wir haben noch ein bisschen mehr zu tun, um dieses Plugin zum Leben zu erwecken, also fangen wir an.
Um Daten auf dem Frontend anzuzeigen, müssen wir sie natürlich zuerst in die Datenbank aufnehmen. Da wir mit Meta-Boxen arbeiten, können wir Funktionen verwenden, die über die Meta-Box-API verfügbar sind, um diese Informationen zu speichern.
Im Einzelnen werden wir mit den folgenden Funktionen arbeiten:
update_post_meta
zum Speichern von Informationen in der Datenbankdelete_post_meta
zum Entfernen von Informationen aus der DatenbankEs gibt noch eine andere Funktion, add_post_meta
, das ist auch verfügbar, um Informationen in die Datenbank zu schreiben; jedoch, update_post_meta
macht dasselbe, wenn die Daten noch nicht in der Datenbank vorhanden sind.
Eine andere Frage, die ich beim Löschen von Post-Metadaten auftauchen habe, ist die Frage, warum? Löschen Sie also Informationen, anstatt einen leeren Wert zu speichern?
Sie können argumentieren, dass dies eine persönliche Präferenz ist - und das ist es auch -, aber wenn Sie mit einem komplizierten Plugin arbeiten, das eine Reihe verschiedener Felder hat und die Felder keinen Wert haben, ist es sinnvoll, keine leere Zeile beizubehalten.
Wenn das Fehlen eines Werts für etwas auf der Benutzeroberfläche nicht sinnvoll ist, gibt es außerdem keinen Grund, einen leeren Wert beizubehalten, da die Datenbank die auf dem Bildschirm angezeigten Informationen enger spiegeln kann.
Wenn Sie versuchen, die Benutzeroberfläche, den Code der Anwendungsebene und die Datenbank so konsistent wie möglich zu halten, ist es hilfreich, wenn Sie versuchen, wartbaren Code zu schreiben.
Schauen wir uns also an, wie die Felder für jedes unserer Eingabefelder gespeichert werden.
Erinnern Sie sich an den vorherigen Beitrag, dass die Entwurf Registerkarte enthält eine einzelne Textbereich
Hier können Autoren verschiedene Notizen und URLs aus dem gesamten Web sammeln, die für den Inhalt relevant sind, den sie veröffentlichen.
Als wir diesen Code zuletzt verlassen haben, hatten wir Folgendes:
Hier schauen wir, ob der Inhalt der
$ _POST
Array ist gefüllt. Wenn ja, bereinigen wir die Informationen mittrimmen
undesc_textarea
.Jetzt können wir es in die Datenbank schreiben. Ersetzen Sie also die Zeile, die liest
// Da kommt noch mehr…
mit dem folgenden Code (beachten Sie, dass wir uns den Code nach dem Block genauer ansehen):Hier benutzen wir die
update_post_meta
Funktion, um den Inhalt in der Datenbank hinzuzufügen oder zu aktualisieren. Beachten Sie, dass die Funktion drei Parameter benötigt:
- Die Post-ID, die verwendet wird, um diese Informationen mit dem Post zu verknüpfen
- Ein Metaschlüssel, mit dem der Wert eindeutig identifiziert wird
- Der tatsächliche Metawert, der dem Metaschlüssel zugeordnet ist
Beachten Sie auch, dass der Wert von
$ _POST
Array ist leer, dann prüfen wir, ob es dort ist ist einen Wert für den Entwurf in der Datenbank, und wenn er vorhanden ist, entfernen wir ihn.2. Ressourcen
Weil wir bereits die Grundlagen für die Bereinigung der Informationen gelegt haben und gesehen haben, wie Sie Informationen in der Datenbank sowohl aktualisieren als auch löschen, indem Sie dasselbe für die Ressourcen Tab ist mehr vom selben.
Die einzige Ausnahme ist, dass wir, da es sich um einen dynamischen Satz von Informationen handelt, den Beitrag dynamisch mit einer eindeutigen ID verknüpfen müssen, je nachdem, wie viele Ressourcen wir sparen.
Im vorherigen Beitrag sah unser Code so aus:
Wenn es darum geht, Informationen dynamisch zu verarbeiten, a
für jeden
Schleife funktioniert super; Beim Speichern von Informationen müssen wir jedoch jedem Wert einen eindeutigen Schlüssel zuordnen.Eine Option wäre, eine for-Schleife einzurichten, um dem Metaschlüssel einen eindeutigen Schlüssel hinzuzufügen (durch Verwendung des Iterators für jeden Wert in der Schleife). Dies kann jedoch zu Problemen beim Löschen von Informationen führen. Insbesondere wenn der Benutzer einen Wert für die erste, zweite und dritte Eingabe eingibt, dann aber die zweite Eingabe entfernt und beim Aktualisieren des Beitrags nur die erste und dritte hinterlässt, müssen wir diese leeren Werte ordnungsgemäß löschen und alle Datensätze entsprechend verschieben.
Dies kann auf verschiedene Arten geschehen, es ist jedoch tatsächlich einfacher, ein einzelnes serialisiertes Array in einem eindeutigen Index zu speichern, anstatt irgendetwas mit Datenbankzeilen, Abfragen usw. zu versuchen.
Daher aktualisieren wir den obigen Code so, dass er wie folgt aussieht:
Wenn Sie einen Blick in die Datenbank werfen und sich diesen bestimmten Schlüssel ansehen, sollten Sie Folgendes als Wert sehen:
a: 3: i: 0; s: 22: "http://tommcfarlin.com"; i: 1; s: 19: "http://tutsplus.com"; i: 2; s: 17: " http://google.com ";Wir werden sehen, wie sich dies auswirkt, wenn wir die Informationen aus der Datenbank später in diesem Artikel abrufen. Beachten Sie auch, dass wir den Fall berücksichtigen müssen, wenn ein Benutzer alle Instanzen von Ressourcen entfernt hat.
Genau wie im ersten Teil des Artikels löschen wir einfach die Post-Metadaten, wenn ein Wert vorhanden ist. Dies kann mit sehr ähnlichem Code erfolgen:
Nun müssen wir die Werte für die letzte Meta-Box speichern.
3. Veröffentlicht
Der letzte Tab der Meta-Box, der Veröffentlicht Tab, wird für uns am einfachsten zu aktualisieren sein, da es alles zusammenbringt, was wir bisher im Artikel gesehen haben.
Insbesondere durchlaufen wir eine Auflistung von Werten, schreiben sie in ein Array und serialisieren das Array anschließend in die Datenbank. Das Wichtigste ist vielleicht, dass wir ein assoziatives Array verwenden und jeden Wert anhand des Werts der Kommentar-ID indizieren.
Wie wir später in diesem Artikel sehen werden, wird das Festlegen der Werte auf der Benutzeroberfläche viel einfacher.
$ comment_value) $ comment = strip_tags (striplashes ($ comment_value)); $ sanitized_comments [$ comment_id] = $ comment; update_post_meta ($ post_id, 'Autors-Commentary-comments', $ sanitized_comments);Genauso wie im vorigen Abschnitt, wenn im Abschnitt nichts angegeben ist
$ _POST
Array, dann überprüfen wir das Vorhandensein der Werte in der Datenbank und, falls vorhanden, löschen wir sie:$ comment_value) $ comment = strip_tags (striplashes ($ comment_value)); $ sanitized_comments [$ comment_id] = $ comment; update_post_meta ($ post_id, 'Autors-Commentary-comments', $ sanitized_comments); else if ("! == get_post_meta ($ post_id, 'Autors-Kommentar-Kommentare', true)) delete_post_meta ($ post_id, 'Autors-Kommentar-Kommentare');Wie bereits erwähnt, fasst dieses letzte Beispiel alles zusammen, was wir für die letzten beiden Registerkarten gesehen haben, daher sollte der Code an dieser Stelle relativ klar sein.
Ein Wort zur Datenbank
Bevor wir weitergehen, nehmen wir uns einen Moment Zeit, um zu verstehen, wie wir Informationen aus der Datenbank abfragen können.
Nehmen wir an, Sie haben einen Beitrag mit der ID 9000 (je nachdem, wie Sie eingerichtet sind). Sie können diese ID nehmen und in die
wp_postmeta
Tabelle, um alle Metainformationen anzuzeigen, die dem Beitrag zugeordnet sind.Darüber hinaus können Sie den Schlüssel angeben, um nur die mit der Post-ID und dem Schlüssel verknüpften Informationen zurückzuholen.
Wenn Sie nur die Beitrags-ID angeben, werden alle mit dem Beitrag verknüpften Meta-Informationen angezeigt. Wenn Sie nur den Schlüssel angeben, werden alle Beitrags-IDs angezeigt, die Inhalt für ihre Entwürfe enthalten. Wenn Sie sowohl die Beitrags-ID als auch den Schlüssel angeben, werden nur die Entwurfsinformationen zurückgezogen, die Sie für einen einzelnen Beitrag angegeben haben.
Was das Abrufen von Daten angeht, schauen wir uns die Schritte an, die zum Anzeigen der Post-Metadaten im Dashboard unseres Plugins erforderlich sind.
Daten abrufen
Nachdem nun alle Informationen in der Datenbank gespeichert wurden, können Sie Code einführen, der sie abruft und auf der entsprechenden Registerkarte jedes Plugins anzeigt. Das Schöne daran ist, dass es Funktionen und Konstruktoren (wie
get_post_meta
undzum
), die wir bereits verwendet haben.1. Entwurf
Lokalisieren
admin / views / partials / drafts.php
. Wenn Sie davon ausgehen, dass Sie bis jetzt alles mitverfolgt haben, sollte der Code so aussehen:Um dies zu bevölkern
Textbereich
, wir müssen anrufenget_post_meta
Verwenden der aktuellen Post-ID und des Schlüssels, den wir zum Speichern von Informationen zuvor in diesem Artikel verwendet haben. Schauen Sie sich den folgenden Code an:Beachten Sie, dass wir drei Parameter übergeben:
- Die erste ist die Post-ID, die mit Hilfe von abgerufen wird
get_the_ID
Funktion.- Der zweite ist der Schlüssel, den wir beim Speichern der Daten angegeben haben, um sie eindeutig zu identifizieren.
- Der dritte ist ein boolescher Wert true, der die Funktion anweist, uns den Wert als String und nicht in einem Array zurückzugeben.
Wenn der Wert nicht vorhanden ist, wird einfach eine leere Zeichenfolge zurückgegeben
Textbereich
ist leer.2. Ressourcen
Zum Ressourcen, Wir machen einen ähnlichen Anruf. Dieses Mal möchten wir jedoch die Ergebnisse durchlaufen, um die Benutzeroberfläche dynamisch erstellen zu können.
Aufgrund der Art und Weise, wie WordPress das Array serialisiert, möchten wir immer noch, dass die Informationen in einem String-Format zurückgegeben werden (obwohl es ein deserialisiertes Array ist), das uns die Verwendung eines
für jeden
Schleife zum Durchlaufen.
Kurz gesagt, wir rufen die Informationen aus der Datenbank ab, durchlaufen sie und erstellen eine
Eingang
Element für jeden Wert und dann für die Seite gerendert.Dadurch können wir auch Elemente entfernen, indem Sie einfach einen Wert löschen und dann den Beitrag aktualisieren. Von dort aus wird die Anzeige erneut so gerendert, dass keine leeren Eingabeelemente vorhanden sind.
3. Veröffentlicht
Dies ist wohl der einfachste Teil des Plugins. Da wir bereits so viel Code in der Vorlage haben, müssen wir nur feststellen, ob der Wert für das Kontrollkästchen im Metadaten-Array festgelegt ist.
Da wir die Kommentar-ID als numerischen Index des Arrays verwenden, können Sie einfach überprüfen, ob die Kommentar-ID im Array der Metaschlüssel enthalten ist, das von den Metadaten zurückgegeben wird.
Hier ist wie:
load_post_comments (); ?>
comment_author; ?>: Kommentar_Inhalt; ?>
Beachten Sie, dass wir den Wert aus der Datenbank abrufen und erneut übergeben
wahr
als dritter Wert.Als nächstes nehmen wir die aktuelle Kommentar-ID und prüfen, ob dieser Wert in den Array-Schlüsseln enthalten ist (mithilfe von
array_key_exists
) Der zurückgegebenen Post-Metadaten. Wenn ja, markieren wir das Kontrollkästchen als markiert; sonst machen wir nichts.Als nächstes
An diesem Punkt haben wir ein voll funktionsfähiges Plugin, das alle Anforderungen erfüllt, die wir ab dem ersten Artikel der Serie erstellen wollten.
Aber ist das Plugin selbst wartbar? Das heißt, erfüllt es das Hauptziel dieser Serie?
Irgendwann ja, aber es gibt Raum für Verbesserungen. Da ein Teil der Entwicklung mit dem von uns geerbten Code zu tun hat, werden wir einen Blick darauf werfen, wie wir einen Teil des Codes, den wir geschrieben haben, umgestalten, um ihn verständlicher und wartbarer zu machen.
Darüber hinaus werden wir uns Gründe dafür ansehen, warum wir einige der von uns durchgeführten Refactorings durchführen. Schließlich wäre es nicht sinnvoll, Code zu vereinfachen oder ohne Begründung zu verschieben.
Bevor Sie dies tun, sollten Sie diesen Artikel durcharbeiten und einen Blick auf den Code des zugehörigen GitHub-Repositorys werfen. Kommentare, Fragen oder allgemeines Feedback erhalten Sie weiter unten.