Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. WordPress Plugins
Code

Verwenden von Namespaces und Autoloading in WordPress-Plugins, Teil 1

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Using Namespaces and Autoloading in WordPress Plugins.
Using Namespaces and Autoloading in WordPress Plugins, Part 2

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Namespaces und Autoloading sind keine Themen, die normalerweise beim Arbeiten mit WordPress-Plugins diskutiert werden.

Einige davon haben etwas mit der Community zu tun, einige davon haben mit den PHP-Versionen zu tun, die WordPress unterstützt, und einige davon haben einfach damit zu tun, dass nicht viele Leute darüber reden.

Und das ist bis zu einem gewissen Grad in Ordnung.

Weder Namespaces noch Autoloading sind Themen, die Sie unbedingt zum Erstellen von Plugins benötigen.  Sie können jedoch Ihren Code besser organisieren und strukturieren sowie die Anzahl der von Ihren Plugins verwendeten Anweisungen require, require_once, include oder include_once reduzieren.

In dieser Serie werden wir uns genau anschauen, welche PHP-Namespaces, warum sie nützlich sind und wie sie verwendet werden.  Dann sehen wir uns an, wie wir mit Autoloadern die benötigten Dateien automatisch laden können, ohne sie manuell in unseren Code laden zu müssen.

Bevor wir anfangen

Um zu beginnen, werden Sie die folgenden Werkzeuge benötigen:

  • Eine lokale Entwicklungsumgebung mit PHP 5.6.20, dem Apache-Webserver und einem MySQL-Datenbankserver.
  • Ein Verzeichnis, aus dem WordPress 4.6 gehostet wird.
  • Ein Texteditor oder eine IDE Ihrer Wahl, die Sie gerne zum Schreiben eines Plugins verwenden.
  • Ein Arbeitswissen der WordPress Plugin API.

Sobald Sie all das an Ort und Stelle haben, beginnen wir mit dem Erstellen eines Plugins.  Beachten Sie, dass, wenn einer der oben genannten Punkte für Sie neu ist, zögern Sie nicht, eines meiner vorherigen Tutorials auf meiner Profilseite zu lesen.

Außerdem kannst du mir auf meinem Blog und/oder Twitter bei @tommcfarlin folgen, wo ich über Softwareentwicklung im Kontext von WordPress spreche.

Mit dem gesagt, lass uns anfangen.

Was wir bauen werden

In dieser Serie werden wir hauptsächlich ein einfaches Plugin erstellen, um zu demonstrieren, wie Namespaces und Autoloading in PHP funktionieren.  Aber dazu hilft es immer, die Konzepte praktisch anzuwenden.

Zu diesem Zweck werden wir ein Plugin erstellen, das das Laden von Stylesheets und JavaScript-Stilen in unser Plugin erleichtert und ein Metabox anzeigt, das den Benutzer mit einer Frage auffordert, ihm beim Brainstorming zu helfen.

Nein, das ist nicht etwas, das Sie wahrscheinlich im WordPress Plugin Repository einreichen, noch wird es etwas außerhalb dieser speziellen Demo sein.  Aber denken Sie daran, der Zweck dieser Serie ist es, zu demonstrieren, wie Namespaces und Autoloading funktionieren.

Und durch dieses Beispiel werden wir genau das tun.

Erstellen des Plugins

Wenn Sie einer meiner früheren Tutorials gefolgt sind, dann wissen Sie, dass ich vor allem gerne plane, was wir bauen werden, bevor wir anfangen, irgendeinen Code zu schreiben.  Für die erste Iteration dieses Plugins wissen wir, dass wir Folgendes tun müssen:

  1. Definieren Sie eine Bootstrap-Datei zum Starten des Plugins.
  2. Richten Sie ein Verzeichnis für alle Dateien ein, die das Meta-Feld rendern.
  3. Erstellen Sie ein Verzeichnis für die Klasse, die unsere Abhängigkeiten lädt.
  4. Bereiten Sie die Stylesheets und JavaScript für unser Plugin vor.

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

Lass uns anfangen.

Erstellen des Plugin-Verzeichnisses

Von Anfang an wissen wir, dass wir eine Datei benötigen, die als Bootstrap für das Plugin dient.  Wir wissen auch, dass wir ein Verzeichnis für die administrativen Funktionen benötigen.

Lass uns weitermachen und das jetzt erstellen:

The plugins initial directory structure

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

Um dies zu tun, müssen wir den folgenden Codeblock oben in der Plugin-Datei hinzufügen:

Wenn Sie dann im Verwaltungsbereich zur WordPress-Pluginseite navigieren, sollten Sie sehen, dass sie in Ihrer Plug-in-Liste angezeigt wird.  Wenn Sie sich dafür entscheiden, es zu aktivieren, wird nichts passieren, da wir keinen Code geschrieben haben.

The Tuts Namespace Demo plugin in the WordPress administration area

An diesem Punkt können wir fortfahren und beginnen, die Klasse zu definieren, die unsere Metabox auf der Seite Neuen Beitrag hinzufügen darstellt.

Hinzufügen einer Meta-Box

Dieser Teil des Tutorials geht davon aus, dass Sie mit der Erstellung von Meta-Boxen vertraut sind.  Wenn nicht, zögern Sie nicht, die Konzepte in dieser Reihe zu überprüfen und dann zu diesem Teil zurückzukehren, wenn Sie fertig sind.

Zuerst erstellen wir eine Datei namens class-meta-box-display.php im admin-Verzeichnis unseres Plugins.  Der Code sollte Folgendes enthalten.  Stellen Sie sicher, dass Sie die Kommentare überprüfen, um sicherzustellen, dass Sie alles verstehen, für das diese Klasse zuständig ist.

Anhand des obigen Codes sollten Sie feststellen können, dass diese Klasse für die Anzeige des Inhalts in der Metabox verantwortlich ist.  Fürs Erste jedoch haben wir es einfach eine Aussage für die Ansicht widerspiegeln.

Wir werden das später im Tutorial ändern.

Als nächstes müssen wir eine Klasse einführen, die die Metabox selbst darstellt.  Also erstelle eine class-meta-box.php Datei im admin-Verzeichnis unseres Plugins. Hier ist der Code für genau das.  Überprüfen Sie den Code erneut und ich werde dann erklären, was unterhalb der Klasse geschieht:

Diese Klasse behält ein einzelnes Attribut bei, das eine Referenz auf ihre Anzeige ist.  Dies bedeutet, dass diese Klasse für das Definieren der Metabox verantwortlich ist (die wiederum das Anzeigeobjekt zum Rendern der Nachricht aufruft).

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

An dieser Stelle haben wir alles, was wir brauchen, um eine rudimentäre Metabox auf der Seite Neue Post hinzufügen anzuzeigen.  Aber zuerst müssen wir den Bootstrap unseres Plugins einrichten.

In früheren Tutorials habe ich das sehr oft gemacht, deshalb werde ich nur den Code mit einbeziehen, der benötigt wird (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 relevant, da unser Autoloader möglicherweise die Notwendigkeit von etwas von dem, was Sie sehen werden, negieren wird.

Zuerst stellen wir sicher, dass diese Datei nicht direkt zugänglich ist und nur von WordPress selbst ausgeführt werden kann.

Als nächstes nehmen wir include_once die Klassen auf, die wir bisher erstellt haben.  Als nächstes instanziieren wir die Meta_Box und übergeben ihr eine Instanz von Meta_Box_Display in ihrem Konstruktor.

Schließlich rufen wir die init-Methode auf, die sich in der Klasse Meta_Box befindet.

Vorausgesetzt, alles läuft gut, sollten wir in der Lage sein, das Plugin zu aktivieren und das Meta-Feld auf der Seite Neuen Beitrag hinzufügen (oder tatsächlich auch auf der Seite Aktualisierungspost) zu sehen.

Our Meta Box appearing on the New Post Edit Post page

An dieser Stelle haben wir ein funktionierendes Plugin, aber es macht nichts anderes als eine Meta-Box zu erstellen und eine Textfolge anzuzeigen.

Lassen Sie uns wenigstens einige inspirierende Zitate anzeigen und jedes Mal, wenn die Seite geladen wird, ein zufälliges anzeigen.

Inspirierende Zitate anzeigen

Zuerst müssen wir eine Textdatei mit Inspirationszitaten finden.  Glücklicherweise bietet das Internet eine Fülle von diesen, die wir in unserem Projekt verwenden können (und sie sind frei verfügbar).  Zu diesem Zweck habe ich ein data unterverzeichnis in admin erstellt, das ich verwende, um meine questions.txt-Datei aufzunehmen.

The questionstxt file in the data subdirectory

Als nächstes müssen wir eine Klasse erstellen, die:

  1. Öffne die Datei.
  2. Lesen Sie eine zufällige Zeile in eine Zeichenfolge.
  3. Schließen Sie die Datei.
  4. Gibt die Zeichenfolge an den Aufrufer 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 Unterverzeichnis util in admin.  Als nächstes erstellen wir eine Datei namens class-question-reader.php.

Wir werden den Code für diese Klasse in Kürze angeben, aber kehren Sie 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 können, wird die Anzahl der Dateien, die wir manuell hinzufügen müssen, länger.  Stellen Sie sich vor, wir arbeiten an einem großen Plugin!  Trotzdem werden wir später in der Serie darauf zurückkommen.

Lassen Sie uns zunächst auf den Fragesteller zurückkommen.  Der Code für die Klasse sollte folgendermaßen aussehen:

Beachten Sie, dass der Code dafür relativ einfach ist. Wenn Sie jedoch mit den grundlegenden Dateioperationen in PHP nicht vertraut sind, gehen wir folgendermaßen vor:

  1. Wir öffnen die Datei mit fopen, wodurch uns eine Ressource zum Lesen der Datei zur Verfügung steht.
  2. Als nächstes lesen wir den Inhalt der Datei und nehmen dann jede Zeile der Datei und schreiben sie in einen Index eines Arrays.
  3. Danach wählen wir eine Zufallszahl aus dem Fragenfeld und geben sie an die Methode zurück, die sie aufruft.  Wenn es eine leere Zeichenfolge zurückgibt, suchen wir erneut, bis eine Frage gefunden wird.
  4. Dann schließen wir die Ressource für die Datei.

Um diese Klasse zu verwenden, müssen Sie sie nur instanziieren, den Pfad zu einer Datei voller Fragen kennen und dann die Methode get_question_from_file aufrufen.

Hinweis: Diese Klasse führt keine Fehlerbehandlung durch.  Das ist eine Standardmethode beim Arbeiten mit Dateien.  Zum Beispiel, was sollen wir tun, wenn die Datei nicht existiert?  Was sollten wir tun, wenn es nicht richtig formatiert ist, oder wenn wir die Ressource nicht schließen können?

All das sind gute Fragen, aber sie sind nicht Gegenstand dieses Tutorials.  All diese Informationen finden Sie im PHP-Handbuch (und vielleicht auch in einigen anderen Tutorials im Envato Tuts+ Netzwerk).

Im Moment geht es uns jedoch um das Lesen einer Datei, von der wir wissen, dass sie existiert, und wir befassen uns damit, die Ergebnisse in einer Meta-Box anzuzeigen.

Was wir bisher haben

An diesem Punkt können wir alles zusammensetzen.  Vorausgesetzt, wir haben alles richtig gemacht, sollten wir in der Lage sein, eine Instanz des Question_Reader an das Meta_Box_Display zu übergeben, nach einer Frage zu fragen und sie dann in der Meta-Box anzuzeigen.

Lassen Sie uns zunächst die Bootstrap-Datei aktualisieren:

Beachten Sie, dass das Meta_Box_Display in dem obigen Code eine Instanz des Frage-Lesers jetzt in seinem Konstruktor akzeptiert.  Dies bedeutet, dass wir eine neue Eigenschaft einführen müssen, die wir jetzt machen werden:

Beachten Sie, dass diese Datei den Pfad zu den Fragen verwendet, die der Datei zum Unterverzeichnis data hinzugefügt wurden.  Abgesehen davon, dass der Pfad fest codiert ist, hängt diese Klasse auch von einer Instanz von Question_Reader ab.

Für die Zwecke der Demo, auf die wir hinarbeiten (Namespaces und Autoloading), ist das in Ordnung.  In einem zukünftigen Projekt möchten wir, dass die Projekte weniger miteinander kommunizieren.  Vielleicht wird dies ein Thema für ein zukünftiges Tutorial sein.

Der Hauptvorzug des obigen Codes ist jedoch, dass die Meta_Box_Display-Klasse dem Benutzer jetzt eine Frage anzeigen kann.

Beachten Sie außerdem die Verwendung von wp_kses, um die Daten zu bereinigen, bevor Sie sie dem Benutzer präsentieren.

Wenn Sie die Seite Neuen Beitrag hinzufügen aktualisieren, sollte ein Bild wie dieses angezeigt werden:

Random questions appearing in a meta box

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 beschäftigen, aber das ist in Ordnung!  Es ist wichtig, dass wir die Grundlage für ein Plugin legen, das sie nicht verwendet.  Auf diese Weise können wir, wenn wir sie implementieren, die Vorteile sehen, die sie bringen.

Außerdem haben wir noch etwas zu tun: Wir müssen JavaScript und CSS und einen Assets Loader einführen.  Dies ermöglicht uns, ein noch umfassenderes Bild davon zu bekommen, wie vorteilhaft es ist, unsere Dateien in Namespaces zu packen.

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

Wie immer, wenn du nach anderen Hilfsprogrammen suchst, die dir helfen, deine wachsenden Tools für WordPress zu entwickeln oder zum Beispiel Code, um in WordPress besser zu lernen und zu lernen, vergiss nicht zu sehen, was wir in Envato zur Verfügung haben Markt.

Nachdem dies gesagt wurde, haben wir eine funktionierende Version des Plugins fertig zum Download, beginnend mit dem nächsten Tutorial in 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

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.