Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress Plugins
Code

Erstellen eines benutzerdefinierten WordPress-Messaging-Systems, Teil 4

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Creating a Custom WordPress Messaging System.
Creating a Custom WordPress Messaging System, Part 3

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

In dieser Serie haben wir einen Blick darauf geworfen, wie wir ein System implementieren können, mit dem wir programmatisch benutzerdefinierte Nachrichten definieren können, die auf einer bestimmten Verwaltungsseite im WordPress-Backend angezeigt werden.

Wenn Sie der bisherigen Serie gefolgt sind, dann wissen Sie:

  • Wir haben das Fundament für das Plugin gelegt, das in dieser Serie verwendet wird, und es sogar noch ein bisschen weiterentwickelt.
  • Wir haben einen benutzerdefinierten Hook definiert und verwendet, mit dem wir die Einstellungsnachrichten rendern können.
  • Wir haben Unterstützung für Erfolgs-, Warn- und Fehlermeldungen hinzugefügt, die oben auf einer bestimmten Einstellungsseite gerendert werden können.

Wie im vorherigen Tutorial erwähnt:

Aber wenn Sie eines meiner früheren Tutorials gelesen haben, wissen Sie, dass ich kein Fan von doppeltem Code bin. Ich bin auch nicht begeistert davon, dass eine Klasse viele Dinge tut. Und genau das machen wir hier leider.

Und wir werden das in diesem letzten Tutorial behandeln. Am Ende werden wir eine vollständig umgestaltete Lösung haben, die einige objektorientierte Zwischenprinzipien wie Vererbung verwendet. Wir haben auch ein paar Methoden, die wir programmatisch verwenden können oder die mit dem WordPress Hook-System registriert werden können.

Erste Schritte am Ende

An dieser Stelle sollten Sie genau wissen, was Sie in Ihrer lokalen Entwicklungsumgebung benötigen. Insbesondere sollten Sie Folgendes haben:

  • PHP 5.6.25 and MySQL 5.6.28
  • Apache oder Nginx
  • WordPress 4.6.1
  • Ihre bevorzugte IDE oder Ihr bevorzugter Editor

Ich empfehle auch die neueste Version des Quellcodes, da Sie damit alle Änderungen, die wir vornehmen werden, durchgehen können. Wenn Sie es nicht haben, ist das in Ordnung, aber ich empfehle Ihnen, die vorherigen Tutorials zu lesen, bevor Sie weitermachen.

Im vorherigen Lernprogramm

Wie Sie sich vielleicht erinnern (oder aus dem obigen Kommentar herausgefunden haben), hat uns das vorherige Tutorial eine einzige Klasse hinterlassen, die zu viel Arbeit gemacht hat.

Eine Möglichkeit, dies zu wissen, ist, dass Sie, wenn Sie beschreiben würden, was die Klasse macht, keine einzige Antwort geben könnten. Stattdessen müssten Sie sagen, dass es für die Verarbeitung von Erfolgsmeldungen, Warnmeldungen und Fehlermeldungen verantwortlich ist und dass alle unabhängig voneinander gerendert werden.

Und obwohl Sie vielleicht sagen würden, dass es "benutzerdefinierte Nachrichten verwaltet", würden Sie nicht unbedingt beschreiben, wie ausführlich die Klasse war. Das hoffen wir in diesem Tutorial zu lösen.

Im abschließenden Tutorial

Insbesondere werden wir Folgendes tun:

  • Entfernen der Messenger-Klasse für alte Einstellungen
  • Hinzufügen einer neuen, allgemeineren Einstellungsnachrichtenklasse
  • Hinzufügen einer Messenger-Klasse für Einstellungen, mit der kommuniziert werden kann
  • Einführung von Methoden, die wir unabhängig von WordPress verwenden können
  • Optimieren, wie WordPress die Nachrichten rendert

Wir haben unsere Arbeit für uns erledigt, also lass uns voran gehen und mit all dem beginnen.

Refactoring unserer Arbeit

Wenn es darum geht, unsere Arbeit neu zu gestalten, hilft es, genau zu wissen, was wir tun wollen. In unserem Fall erkennen wir, dass wir viel doppelten Code haben, der komprimiert werden könnte.

Darüber hinaus haben wir drei verschiedene Arten von Nachrichten, die genau so verwaltet werden, wie sie gerendert werden. Und in diesem Fall ist es ein Problem der HTML-Klassenattribute.

Daher können wir diesen Code verallgemeinern, um sich auf einen bestimmten Typ zu konzentrieren, und wir können viele Methoden zum Hinzufügen von Erfolgsmeldungen oder zum Abrufen von Fehlermeldungen konsolidieren, indem Sie eine Methode zur Erkennung dieses Typs verallgemeinern.

Letztendlich werden wir das tun. Aber zuerst etwas Hauswirtschaft.

1. Entfernen Sie den alten Einstellungs-Messenger

In den vorherigen Tutorials haben wir mit einer Klasse namens Settings_Messenger gearbeitet. Bis zu diesem Punkt hat es seinen Zweck erfüllt, aber wir werden diese Klasse während des gesamten restlichen Tutorials neu gestalten.

Wenn es zu dieser Art von Refactoring kommt, ist es einfach, die Klasse einfach löschen und neu beginnen zu wollen. Es gibt Zeiten, in denen dies angebracht ist, aber das gehört nicht dazu. Stattdessen nehmen wir diese Klasse und umgestalten, was bereits da ist.

All dies zu sagen, löschen Sie nicht die Datei und beginnen Sie mit einem neuen. Verfolgen Sie stattdessen, was wir in diesem Tutorial tun.

2. Eine neue Einstellungsnachrichtenklasse

Lassen Sie uns zunächst eine Settings_Message-Klasse einführen. Dies stellt jede Art von Einstellungsnachricht dar, mit der wir schreiben werden. Das heißt, es werden Erfolgsmeldungen, Fehlermeldungen und Warnmeldungen verwaltet.

Um dies zu tun, definieren wir die Klasse, führen eine einzelne Eigenschaft ein und dann instanziieren wir sie im Konstruktor. Schau dir diesen Code an und ich werde im Folgenden ein wenig mehr erklären:

Beachten Sie, dass wir ein privates Attribut $messages erstellt haben. Wenn die Klasse instanziiert wird, erstellen wir ein mehrdimensionales Array. Jeder Index, der entweder durch success, error oder warning identifiziert wird, bezieht sich auf sein eigenes Array, in dem wir die entsprechenden Nachrichten speichern.

Als nächstes müssen wir in der Lage sein, eine Nachricht hinzuzufügen, eine Nachricht zu erhalten und alle Nachrichten zu erhalten. Ich werde jeden dieser Punkte im Detail besprechen.

Nachrichten hinzufügen

Sehen wir uns zuerst an, wie wir Nachrichten hinzufügen:

Diese Nachricht nimmt zuerst die eingehende Zeichenfolge und bereinigt die Daten. Dann überprüft es, ob es bereits in den Erfolgsmeldungen vorhanden ist. Wenn ja, kehrt es einfach zurück. Schließlich wollen wir keine doppelten Nachrichten.

Andernfalls wird die Nachricht der Sammlung hinzugefügt.

Nachrichten erhalten

Das Abrufen von Nachrichten erfolgt in zwei Formen:

  1. Rendern einzelner Nachrichten nach Typ
  2. Rendern der Nachrichten in der Anzeige der Verwaltungsseite (komplett mit HTML-Bereinigung usw.)

Denken Sie daran, dass wir manchmal nur Warnmeldungen anzeigen möchten. In anderen Fällen möchten wir möglicherweise alle Nachrichten anzeigen. Da es zwei Möglichkeiten gibt, dies zu tun, können wir eine davon nutzen und dann in einer anderen Funktion ausnutzen.

Klang verwirrend? Bleib bei mir und ich werde alles erklären. Der erste Teil, auf den wir uns konzentrieren werden, ist das Rendern von Nachrichten nach Typ (Erfolg, Fehler oder Warnung). Hier ist der Code dafür (und es sollte vertraut aussehen):

Beachten Sie, dass wir den gleichen Code aus dem vorherigen Tutorial verwenden. Wir haben es jedoch so verallgemeinert, dass es den eingehenden $type betrachtet und ihn dynamisch auf das Markup anwendet.

Dies ermöglicht uns eine einzige Funktion zum Rendern unserer Nachrichten. Dies ist jedoch nicht alles. Was ist mit den Zeiten, in denen wir alle Nachrichten bekommen wollen? Dies könnte sein, um auf einer Seite zu rendern oder sie für eine andere Verarbeitung programmatisch zu erfassen.

Um dies zu tun, können wir eine andere Funktion einführen:

Diese Nachricht sollte leicht verständlich sein. Es durchläuft einfach alle Nachrichten, die wir in unserer Sammlung haben, und ruft die Funktion get_messages auf, die wir oben beschrieben haben.

Es macht sie immer noch alle zusammen (was wir eine davon in unserer Implementierung eines benutzerdefinierten Hooks sehen werden). Wenn Sie sie für einen anderen Zweck verwenden möchten, können Sie das Ergebnis in eine Zeichenfolge anfügen und es an den Aufrufer zurückgeben oder eine andere programmatische Funktion ausführen.

Dies ist nur eine Implementierung.

3. Der Einstellungen Messenger

Das ist es für die tatsächliche Settings_Message-Klasse. Aber wie kommunizieren wir damit? Sicher, wir können direkt mit ihm reden, aber wenn es eine Zwischenklasse gibt, haben wir eine gewisse Kontrolle darüber, was zurückgegeben wird, ohne der Settings_Message-Klasse mehr Verantwortung zu übertragen, oder?

Geben Sie den Settings_Messenger ein. Diese Klasse ermöglicht das Lesen und Schreiben von Einstellungsnachrichten. Ich denke, ein Fall könnte gemacht werden, dass Sie dies in zwei Klassen aufteilen können, weil er sowohl liest als auch schreibt, aber wie ein Bote, der sendet und empfängt, ist das der Zweck dieser Klasse.

Die anfängliche Einrichtung der Klasse ist unkompliziert.

  • Der Konstruktor erstellt eine Instanz der Settings_Message-Klasse, die wir zum Senden und Empfangen von Nachrichten verwenden können.
  • Es verbindet eine Methode mit unserem benutzerdefinierten tutsplus_settings_messages -Hook, den wir in einem früheren Tutorial definiert haben.

Sehen Sie sich die ersten paar Methoden an:

Erinnern Sie sich von früher in diesem Tutorial, wir haben den Haken in unserer Ansicht definiert, die in der settings.php gefunden werden kann. Der Vollständigkeit halber ist es hier aufgeführt:

Beachten Sie jedoch, dass dieser spezielle Hook die Methode get_all_messages ausnutzt, die wir gleich überprüfen werden. Es muss diese Methode nicht verwenden. Stattdessen könnten Sie einfach Erfolgsmeldungen oder andere Methoden, die Sie verwenden möchten, rendern.

Nachrichten hinzufügen

Das Erstellen der Funktionen zum Hinzufügen von Nachrichten ist einfach, da diese Funktionen einen Typ und die Nachricht selbst erfordern. Denken Sie daran, dass die Settings_Message die Informationen bereinigt, so dass wir die eingehenden Nachrichten einfach weitergeben können.

Sehen Sie unten, wo wir Erfolgs-, Warnungs- und Fehlermeldungen hinzufügen:

Es ist einfach, oder?

Nachrichten erhalten

Das Abrufen von Nachrichten ist nicht viel anders, außer dass wir nur die Art von Nachrichten angeben müssen, die wir abrufen möchten:

Fertig und fertig, oder?

Aber hast du das gefangen?

Beachten Sie, dass sich die Nachrichten vor allem auf zwei andere Methoden beziehen, die wir bisher noch nicht behandelt haben. Dies sind private Nachrichten, die uns helfen, die oben genannten Aufrufe zu vereinfachen.

Überprüfen Sie die folgenden privaten Methoden, die für das Hinzufügen und Abrufen von Nachrichten direkt aus der Instanz "Settings_Message" verantwortlich sind, die auf dem Messenger-Objekt verwaltet wird:

Und das schließt die neue Settings_Messenger-Klasse ein. All dies ist viel einfacher, oder?

Das Plugin starten

Es stellt sich jedoch die Frage: Wie starten wir das Plugin, nachdem wir alle diese Änderungen vorgenommen haben?

Siehe die gesamte Funktion unten:

Und das ist es.

Ein paar Punkte zu beachten:

  • Wenn Sie init auf dem Settings_Messenger nicht aufrufen, müssen Sie sich keine Gedanken über das Anzeigen von Nachrichten auf Ihrer Einstellungsseite machen.
  • Der Code fügt dem Settings_Messenger zwar Nachrichten hinzu, ruft jedoch keine ab, da ich die init-Methode verwende.
  • Wenn Sie die Nachrichten abrufen möchten, können Sie die oben beschriebenen Methoden verwenden.

Das ist alles für das Refactoring. Dies funktioniert nicht sofort, da immer noch ein wenig Code benötigt wird, um alle benötigten PHP-Dateien zu laden, damit das Plugin funktioniert. Der obige Code konzentriert sich jedoch auf das Refactoring, auf das der gesamte Lernabschnitt ausgerichtet ist.

Fazit

Für eine vollständig funktionierende Version dieses Tutorials und vollständigen Quellcode, der sofort einsatzbereit ist, laden Sie bitte den Quellcode, der diesem Beitrag beigefügt ist, in der rechten Seitenleiste herunter.

Ich hoffe, dass Sie im Laufe dieses Materials eine Reihe neuer Fähigkeiten und Wege zur Entwicklung von WordPress aufgegriffen haben. Wenn wir uns die Serie ansehen, haben wir viel darüber berichtet:

  • benutzerdefinierte Menüs
  • Einführung von Verwaltungsseiten
  • die verschiedenen Nachrichtentypen
  • Definieren und Nutzen von benutzerdefinierten Hooks
  • Refactoring von objektorientiertem Code

Wie immer, ich bin auch immer glücklich, Fragen über die Kommentare zu beantworten, und Sie können auch in meinem Blog und folgen Sie mir auf Twitter. Normalerweise rede ich über Softwareentwicklung in WordPress und tangentiale Themen. Wenn Sie an mehr WordPress-Entwicklung interessiert sind, vergessen Sie nicht, meine vorherigen Serien und Tutorials sowie das andere WordPress-Material, das wir hier auf Envato Tuts + haben, zu lesen.

Ressourcen

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.