Verwenden von Namespaces und automatisches Laden in WordPress-Plugins, Teil 1

Namensräume und automatisches Laden sind keine Themen, die normalerweise beim Arbeiten mit WordPress-Plugins behandelt werden.

Ein Teil davon hat mit der Community zu tun, die es umgibt, einiges hat mit den von WordPress unterstützten PHP-Versionen zu tun, und ein Teil davon hat einfach mit der Tatsache zu tun, dass nicht viele Leute darüber sprechen.

Und das ist zu einem gewissen Grad in Ordnung.

Weder Namespaces noch das automatische Laden sind Themen, die Sie unbedingt zum Erstellen von Plugins verwenden müssen. Sie können jedoch eine bessere Möglichkeit bieten, Ihren Code zu organisieren und zu strukturieren sowie die Anzahl von zu reduzieren benötigen, einmalig benötigt, umfassen, oder include_once Anweisungen, die Ihre Plugins verwenden.

In dieser Serie werden wir uns genauer ansehen, was PHP-Namespaces sind, warum sie von Vorteil sind und wie man sie verwendet. Dann schauen wir uns an, wie Autoloader die benötigten Dateien automatisch laden, ohne sie manuell in unseren Code laden zu müssen.

Bevor wir anfangen

Für den Einstieg benötigen Sie folgende Tools:

  • Eine lokale Entwicklungsumgebung, die PHP 5.6.20, den Apache-Webserver und einen MySQL-Datenbankserver umfasst.
  • Ein Verzeichnis, in dem WordPress 4.6 gehostet wird.
  • Ein Texteditor oder eine IDE Ihrer Wahl, mit der Sie ein Plugin schreiben können.
  • Grundkenntnisse der WordPress Plugin API.

Sobald Sie all das zur Verfügung haben, können Sie mit dem Erstellen eines Plugins beginnen. Wenn einer der oben genannten Punkte Ihnen als neu erscheint, zögern Sie nicht Sehen Sie sich meine vorherigen Tutorials auf meiner Profilseite an. 

Außerdem können Sie mir auf meinem Blog und / oder Twitter auf @tommcfarlin folgen, wo ich über Softwareentwicklung im Kontext von WordPress spreche.

Nachdem dies gesagt ist, lasst uns anfangen.

Was wir bauen werden

In dieser Serie werden wir ein einfaches Plugin erstellen, das in erster Linie veranschaulicht, wie Namespaces und das automatische Laden in PHP funktionieren. Dafür ist es jedoch immer hilfreich, die Konzepte praktisch anzuwenden.

Zu diesem Zweck werden wir ein Plugin erstellen, das das Laden von Stylesheets und JavaScript-Styles in unserem Plugin vereinfacht. Außerdem wird ein Meta-Feld angezeigt, das den Benutzer mit einer Frage auffordert, die ihm beim Brainstorming von Informationen zu Bloging hilft.

Nein, dies ist nicht etwas, das Sie wahrscheinlich dem WordPress Plugin Repository vorlegen würden, und es ist auch etwas, das Sie wahrscheinlich außerhalb dieser speziellen Demo verwenden werden. Denken Sie jedoch daran, dass diese Serie dazu dient, die Funktionsweise von Namespaces und das automatische Laden zu veranschaulichen.

Und durch dieses Beispiel werden wir genau das tun.

Plugin erstellen

Wenn Sie eines meiner vorherigen Tutorials befolgt haben, wissen Sie, dass eines der Dinge, die ich gerne mache, ist, zu planen, was wir bauen werden, bevor wir mit dem Schreiben von Code beginnen. Für die erste Iteration dieses Plugins wissen wir, dass wir dies tun müssen:

  1. Definieren Sie eine Bootstrap-Datei zum Starten des Plugins.
  2. Richten Sie ein Verzeichnis für alle Dateien ein, in denen die Meta-Box dargestellt wird.
  3. Erstellen Sie ein Verzeichnis, in dem die Klasse untergebracht ist, in die unsere Abhängigkeiten geladen werden.
  4. Bereiten Sie die Stylesheets und JavaScript für unser Plugin vor.

Es scheint unkompliziert, richtig? Wenn nicht, keine Sorgen. Ich werde Sie durch den gesamten Prozess mit Code, Kommentaren, Screenshots und Erklärungen führen. 

Lass uns anfangen.

Das Plugin-Verzeichnis erstellen

Wir wissen von Anfang an, dass wir eine Datei benötigen, die als Bootstrap für das Plugin dient. Wir wissen auch, dass wir ein Verzeichnis für die Verwaltungsfunktionalität benötigen.

Lassen Sie uns das jetzt machen:

Offensichtlich haben wir eine einzige leere Datei und ein Admin-Verzeichnis. Lassen Sie uns dieses Plugin so einrichten, dass es im Kontext des WordPress Plugin-Aktivierungsbildschirms angezeigt wird.

Dazu müssen wir den folgenden Codeblock am Anfang der Plugin-Datei hinzufügen:

Wenn Sie dann im Verwaltungsbereich zur WordPress-Plugin-Seite navigieren, sollte diese in der Liste der Plugins angezeigt werden. Wenn Sie sich für die Aktivierung entscheiden, geschieht nichts, da wir keinen Code geschrieben haben.

An diesem Punkt können wir mit der Definition der Klasse beginnen, die unsere Meta-Box auf der Neuen Beitrag hinzufügen Seite.

Hinzufügen einer Meta-Box

In diesem Teil des Lernprogramms wird davon ausgegangen, dass Sie sich mit der Erstellung von Metaboxen auskennen. Wenn nicht, zögern Sie nicht, die Konzepte in dieser Serie zu überprüfen und dann, sobald Sie fertig sind, zu diesem Teil zurückzukehren. 

Zuerst erstellen wir eine Datei mit dem Namen class-meta-box-display.php in dem Administrator Verzeichnis unseres Plugins. Der Code sollte Folgendes enthalten. Überprüfen Sie die Kommentare, um sicherzustellen, dass Sie alles verstehen, für das diese Klasse verantwortlich ist.

Mit dem obigen Code sollten Sie feststellen können, dass diese Klasse für die Anzeige des Inhalts in der Meta-Box verantwortlich ist. Fürs Erste wird jedoch eine Aussage für die Ansicht angezeigt. 

Wir werden dies später im Tutorial ändern.

Als Nächstes müssen wir eine Klasse einführen, die die Meta-Box selbst darstellt. So erstellen Sie eine class-meta-box.php Datei in der Administrator Verzeichnis unseres Plugins. Hier ist der Code, um genau das zu tun. Lesen Sie noch einmal den Code und dann erkläre ich, was unterhalb der Klasse passiert:

Anzeige = $ Anzeige;  / ** * Registriert diese Meta-Box bei WordPress. * * Definiert eine Meta-Box, die inspirierende Fragen oben in der Seitenleiste der Seite "Neuen Beitrag hinzufügen" rendert *, um Blogger * mit etwas zu schreiben, wenn sie mit dem Verfassen eines Posts beginnen. * / public function init () add_meta_box ('tutsplus-post-questions', 'Inspiration Questions', array ($ this-> display, 'render'), 'post', 'side', 'high');  

Diese Klasse verwaltet ein einzelnes Attribut, das eine Referenz auf die Anzeige darstellt. Dies bedeutet, dass diese Klasse für die Definition der Meta-Box (die wiederum das Anzeigeobjekt zum Rendern der Nachricht aufruft) verantwortlich ist..

Die Anzeige wird als private Eigenschaft im Konstruktor verwaltet. Die Meta-Box wird erst definiert, wenn die drin Methode wird aufgerufen (was wir später im Tutorial im Bootstrap des Plugins sehen werden).

An diesem Punkt haben wir alles, was wir brauchen, um eine rudimentäre Meta-Box auf der Neue Beitragsseite hinzufügen. Zuerst müssen wir jedoch den Bootstrap unseres Plugins einrichten.

In vorherigen Tutorials habe ich das schon oft gemacht, also werde ich einschließen gerade der benötigte Code (da ich den Header oben definiert habe). Ich habe Kommentare hinzugefügt, aber ich werde auch erklären, was nach dem Code passiert. 

Dies ist besonders wichtig, da unser Autoloader letztendlich die Notwendigkeit für einiges von dem, was Sie sehen werden, aufhebt.

drin();  

Zunächst stellen wir sicher, dass auf diese Datei nicht direkt zugegriffen werden kann und sie nur von WordPress selbst ausgeführt werden kann.

Nächsten wir include_once die Klassen, die wir bisher erstellt haben. Als nächstes instanziieren wir das Meta_Box und geben Sie eine Instanz der Meta_Box_Display in seinem Konstruktor.

Zum Schluss nennen wir das drin Methode, die in der liegt Meta_Box Klasse.

Wenn alles gut geht, sollten wir das Plugin aktivieren und die Meta-Box auf einem sehen Neuen Beitrag hinzufügen Seite (oder wirklich eine Post aktualisieren Seite auch).

Zu diesem Zeitpunkt haben wir ein funktionsfähiges Plugin, aber es wird nicht wirklich etwas anderes getan, als eine Meta-Box zu erstellen und eine Textzeichenfolge anzuzeigen.

Lasst uns wenigstens Lassen Sie sich einige inspirierende Zitate anzeigen und jedes Mal, wenn die Seite geladen wird, eine zufällige.

Anzeigen von Inspirationszitaten

Zuerst müssen wir eine Textdatei mit Inspirationszitaten finden. Glücklicherweise bietet das Internet eine Fülle davon, die wir in unserem Projekt verwenden können (und sie sind frei verfügbar). Zu diesem Zweck habe ich eine erstellt Daten Unterverzeichnis in Administrator dass ich meine verwende fragen.txt Datei.

Als Nächstes müssen wir eine Klasse erstellen, die Folgendes ermöglicht:

  1. Öffne die Datei.
  2. Eine zufällige Zeile in einen String einlesen.
  3. Schließen Sie die Datei.
  4. Geben Sie die Zeichenfolge an den Anrufer zurück.

Lassen Sie uns jetzt diese Klasse erstellen. Da dies ein Dienstprogramm ist und auf der administrativen Seite des Plugins verwendet wird, erstellen wir ein util Unterverzeichnis in Administrator. Als Nächstes erstellen wir eine Datei mit dem Namen class-question-reader.php.

Wir geben den Code für diese Klasse in Kürze an, kehren aber zur Bootstrap-Datei des Plugins zurück und denken Sie daran, die Datei einzuschließen. Der resultierende Code sollte folgendermaßen aussehen:

Wie Sie sehen, wird die Anzahl der Dateien, die wir manuell hinzufügen müssen, immer länger. Stellen Sie sich vor, wir würden an einem großen Plugin arbeiten! Wir werden jedoch später in der Serie darauf zurückkommen.

Wenden wir uns jetzt dem Leser der Frage zu. Der Code für die Klasse sollte folgendermaßen aussehen:

offen ($ Dateiname); $ question = $ this-> get_random_question ($ file_handle, $ filename); $ this-> close ($ file_handle); $ Frage zurückgeben;  / ** * Öffnet die Datei zum Lesen und gibt die Ressource an die Datei zurück. * * @access private * @param string $ filename Der Pfad zu der Datei, die die Frage enthält. * @return resource Eine Ressource für die Datei. * / private Funktion open ($ filename) return fopen ($ filename, 'r');  / ** * Schließt die gelesene Datei. * * @access private * @param string $ file_handle Die Ressource für die gelesene Datei. * / private Funktion close ($ file_handle) fclose ($ file_handle);  / ** * Öffnet die Datei zum Lesen und gibt die Ressource an die Datei zurück. * * @access private * @param string $ file_handle Die Ressource für die gelesene Datei. * @param string $ filename Der Pfad zu der Datei, die die Frage enthält. * @return string $ question Die Frage, die in der Meta-Box angezeigt werden soll. * / private Funktion get_random_question ($ file_handle, $ filename) $ questions = fread ($ file_handle, Dateigröße ($ filename)); $ fragen = explodieren ("\ n", $ fragen); // Suche nach einer Frage, bis keine leere Zeichenfolge mehr zurückgegeben wird. $ question = $ questions [rand (0, 75)]; while (leer ($ question)) $ question = $ questions [rand (0, 75)];  return $ question;  

Beachten Sie, dass der Code dafür relativ unkompliziert ist. Wenn Sie jedoch einige grundlegende Dateivorgänge in PHP nicht kennen, tun wir Folgendes:

  1. Wir öffnen die Datei mit fopen, Dies gibt uns eine Ressource zum Lesen der Datei.
  2. Als Nächstes lesen wir den Inhalt der Datei und nehmen dann jede Zeile der Datei in einen Index eines Arrays.
  3. Danach wählen wir eine Zufallszahl aus dem Array aus Fragen aus und geben sie an die Methode zurück, die sie aufruft. Wenn eine leere Zeichenfolge zurückgegeben wird, schauen wir erneut, bis eine Frage gefunden wurde.
  4. Dann schließen wir die Ressource zur Datei.

Um diese Klasse verwenden zu können, müssen Sie sie lediglich instanziieren, den Pfad zu einer Datei mit Fragen kennen und dann den Befehl aufrufen get_question_from_file Methode.

Hinweis: Diese Klasse macht nicht Fehlerbehandlung Dies ist eine Standardpraxis bei der Arbeit mit Dateien. Was sollten wir zum Beispiel tun, wenn die Datei nicht existiert? Was sollten wir tun, wenn es nicht korrekt formatiert ist oder wenn die Ressource nicht geschlossen wird?

Dies sind alles gute Fragen, die jedoch außerhalb dieses Tutorials liegen. Alle diese Informationen finden Sie im PHP-Handbuch (und möglicherweise einigen anderen Tutorials im gesamten Envato Tuts + -Netzwerk)..

Im Moment beschäftigen wir uns jedoch mit dem Lesen einer Datei, von der wir wissen, dass sie existiert, und wir kümmern uns darum, die Ergebnisse in einer Meta-Box anzuzeigen.

Was wir bisher haben

An diesem Punkt können wir anfangen, alles zusammenzubringen. Vorausgesetzt, wir haben alles richtig gemacht, sollten wir in der Lage sein, eine Instanz der Question_Reader zum Meta_Box_Display, Fragen Sie nach einer Frage und zeigen Sie sie in der Meta-Box an.

Zuerst aktualisieren wir die Bootstrap-Datei:

drin(); 

Beachten Sie im obigen Code, dass die Meta_Box_Display akzeptiert nun eine Instanz des Fragenlesers in seinen Konstruktor. Dies bedeutet, dass wir eine neue Eigenschaft einführen müssen, was wir jetzt tun:

question_reader = $ question_reader;  / ** * Rendert eine einzelne Zeichenfolge im Kontext der Meta-Box, zu der diese * Anzeige gehört. * / public function render () $ file = dirname (__FILE__). '/data/questions.txt'; $ question = $ this-> question_reader-> get_question_from_file ($ file); echo wp_kses ($ question);  

Beachten Sie, dass diese Datei den Pfad zu den Fragen verwendet, die diese Datei dem Datenunterverzeichnis hinzugefügt hat. Abgesehen davon, dass der Pfad hart codiert ist, ist diese Klasse auch von einer Instanz von Question_Reader.

Für die Zwecke der Demo, auf die wir hinarbeiten (namentlich Namensräume und automatisches Laden), ist das in Ordnung. In einem zukünftigen Projekt möchten wir, dass die Projekte weniger Kopplungen untereinander haben. Vielleicht ist dies ein Thema für ein zukünftiges Tutorial.

Der wichtigste Einstieg aus dem obigen Code ist jedoch der Meta_Box_Display Klasse kann dem Benutzer jetzt eine Frage anzeigen.

Beachten Sie außerdem die Verwendung von wp_kses um die Daten zu säubern, bevor sie dem Benutzer präsentiert werden.

Erfrischung der Neuen Beitrag hinzufügen Seite sollte Ihnen ein Bild wie dieses zeigen:

Und wenn Sie die Seite aktualisieren, können Sie sehen, dass neue Fragen geladen werden.

Was machen wir jetzt?

Natürlich müssen wir uns noch mit den Themen Namespaces und Autoloading befassen, aber das ist in Ordnung! Es ist wichtig, dass wir die Grundlage für ein Plugin legen, das sie nicht verwendet. Auf diese Weise, wenn wir tun umsetzen, können wir die Vorteile sehen, die sie bringen.

Darüber hinaus haben wir noch einige zusätzliche Arbeit zu erledigen: Wir müssen JavaScript und CSS und einen Asset Loader einführen. Auf diese Weise können wir uns ein noch umfassenderes Bild davon machen, wie vorteilhaft das Packen unserer Dateien in Namespaces ist.

Denken Sie daran, dass Sie alle meine vorherigen Tutorials auf meiner Profilseite finden können, und Sie können mir auf meinem Blog oder auf Twitter folgen.

Wenn Sie nach anderen Dienstprogrammen suchen, die Sie dabei unterstützen, Ihr wachsendes Set an Tools für WordPress aufzubauen, oder beispielsweise Code, um sich mit WordPress vertraut zu machen, sollten Sie nicht vergessen, was in Envato verfügbar ist Markt.

Nachdem dies gesagt ist, haben wir eine funktionierende Version des Plugins zum Download bereit, beginnend mit dem nächsten Tutorial dieser Serie. Wenn Sie den Code im obigen Tutorial verwenden möchten, zögern Sie nicht, dies zu versuchen. Darüber hinaus können Sie gerne Fragen in den Kommentaren stellen. 

Ressourcen

  • add_meta_box
  • add_action
  • plugins_loaded
  • fopen
  • fread
  • fclose
  • wp_kses