Grundaufbau eines WordPress Plugins

Ein WordPress Plugin zu schreiben ist mit etwas Erfahrung in PHP gar nicht schwer. Es gibt jedoch verschiedene Vorgehensweisen und Design Patterns für den Grundaufbau eines WordPress Plugins. Gerade für Einsteiger im Plugin Development ist es schwer, sich für eine Methode zu entscheiden. Zumindest ging es mir am Anfang so.

Deshalb möchte ich hier ein Grundgerüst bzw. Boilerplate Plugin zeigen, welches ich für meine WordPress Plugins verwende. Ich bin in erster Linie Frontend Developer und mit HTML und CSS wesentlich besser vertraut als mit PHP. Falls du also Verbesserungsvorschläge für meinen Ansatz hast, hinterlasse einen Kommentar. Danke 🙂

Grundaufbau eines WordPress Plugins

Im Grunde kann ein einfaches WordPress Plugin aus nur einer einzigen Datei bestehen. Zwingend notwendig ist nur ein Header Comment mit den Plugin Informationen, damit das Plugin von WordPress erkannt wird. Alle möglichen Variablen für ein WordPress Plugin findest du im Plugin Handbook.

Im einfachsten Fall ist ein WordPress Plugin nur eine lose Sammlung von PHP Funktionen, vergleichbar mit der functions.php eines Themes. Eine weitere Möglichkeit ist die Gruppierung von Funktionen in einer statischen Klasse, wodurch nicht jede Funktion einen eindeutigen Prefix braucht, sondern nur die Klasse selbst.

Objektorientierte WordPress Plugins und Design Patterns

Neben der prozeduralen Vorgehensweise mit Funktionen und statischen Klassen können Plugins auch vollständig objektorientiert geschrieben werden. Objektorientierte Plugins verwenden für ihr Setup eine Klasse mit Konstruktor und werden mit new Class_Name() instanziiert.

Sehr beliebt ist auch der Aufbau eines WordPress Plugins mit dem Singleton Pattern, welches sicher stellt, dass nur eine einzige Objektinstanz der Plugin Klasse existiert. Wer sich eingehender mit objektorientierter Programmierung und Design Patterns in WordPress Plugins beschäftigen will, sollte den Blog von Tom McFarlin lesen.

Vor allem diese Beiträge:

Mein Grundgerüst für WordPress Plugins

Ich verwende momentan meistens eine statische Klasse als Basis Setup meiner Plugins. Da kein Plugin wirklich komplex ist, erschien mir das Singleton Pattern zu übertrieben. Dessen Vorteile würde in meinen Plugins gar nicht zur Geltung kommen. Auch eine Objektinstanz habe ich für die Basisklasse bisher nicht benötigt. Einen Einsatz des Singleton Patterns kann ich mir aber in Zukunft durchaus vorstellen, wenn es Sinn ergibt.

Hier ist der Code meiner statischen Basis Klasse für WordPress Plugins. Bevor der Erstellung meines ersten Plugins habe ich mir unzählige andere Plugins und deren Implementierung angesehen. Der folgende Code ist von diesen vielen verschiedenen Quellen inspiriert. Eine Erklärung der Funktionen folgt unter dem Code Snippet.

Das Setup des Plugins erfolgt in der Plugin_Boilerplate Klasse. Dabei wird die setup() Methode der Klasse am Ende der Plugin Datei aufgerufen. Grundsätzlich könnte sich der meiste Code direkt in der Setup Funktion befinden. Aus Gründen der Übersichtlichkeit verwenden wir aber mehrere Methoden.

Als Erstes werden alle Konstanten des Plugins in der constants() Methode definiert. Dies geschieht ganz am Anfang, sodass die Konstanten in allen nachfolgenden Funktionen und Klassen zur Verfügung stehen. Als Nächstes werden die Sprachdateien für das Plugin geladen. Wichtig ist auch hier die frühe Ausführung der translation() Funktion im Plugin, sodass alle Texte übersetzt werden können.

Falls das Plugin aus mehreren Dateien besteht, werden diese anschließend mit der includes() Methode eingebunden. Das Code Schnipsel verwendet hier als Beispiel Dateien für Einstellungen im WordPress Backend und die eigentlichen Features des Plugins.

Mit setup_actions() werden dann weitere Basisfunktionen des Plugins aufgerufen. Üblicherweise besteht die Methode deshalb aus einer Reihe von Action und Filter Hooks, die sich in WordPress einklinken. Eine typische Funktion ist beispielsweise das Laden von CSS und JavaScript Dateien.

Fazit

Es gibt nicht den einen bevorzugten Weg, ein WordPress Plugin zu erstellen. Welche Vorgehensweise oder Design Pattern verwendet ihr?