2. Mai 2017

WordPress Plugin Entwicklung Tutorial #1

  • Website

Dies ist der erste Teil einer Blogserie zur Entwicklung von Plugins für WordPress. Beispielhaft wird im Rahmen dieser Serie ein kleines Plugin entwickelt, welches Beiträge eines eigenen Inhaltstypen als Slider darstellt. Als Basis wird das WordPress Plugin Boilerplate verwendet. Dieses liefert eine saubere und durchdachte Dateistruktur, auf die ich am Ende dieses Beitrags genauer eingehen werde.

⇒ Hier geht es direkt zu Teil #2 und Teil #3 des WordPress Plugin Entwicklung Tutorials.

Wann brauche ich ein Plugin?

Plugins bieten die Möglichkeit, eine WordPress Umgebung um Funktionalität und gestalterische Elemente zu erweitern. Alle dafür benötigten Komponenten können so innerhalb eines selbstständigen Moduls angelegt und verwaltet werden, ohne Auswirkungen auf den Rest der WordPress-Umgebung zu haben. Die erzeugte Funktionalität kann durch simples de-/aktivieren des Plugins bei Bedarf an- und ausgeschaltet werden.

Plugin vs Child-Theme

Viele Beispiele, Tutorials und Code-Schnipsel, die man im Web findet, verwenden die functions.php Datei des Child-Themes, um Funktionalität zu erzeugen. Tatsächlich könnte man die hier vorgestellten Anpassungen auch ohne große Veränderungen in dem Child-Theme hinterlegen. Der wichtige Unterschied ist die Verantwortlichkeit der Komponenten. Wenn die gewünschten Anpassungen im Theme vorgenommen werden, sind sie fester Bestandteil von diesem. Man sollte sich also vorab im Klaren sein, ob die gewollten Funktionen eigenständig verwendet werden sollen oder das Theme erweitern. Plugins können so auf beliebigen WordPress-Seiten verwendet werden.

Das WordPress Plugin Boilerplate

Um die Entwicklung von Plugins zu vereinfachen und dem Entwickler eine saubere und erprobte Dateistruktur in die Hand zu legen, hat der professionelle WordPress-Entwickler und Blogger Tom McFarlin ein Boilerplate erstellt. Dieses wird mittlerweile von Devin Vinson verwaltet und ist auch auf GitHub einsehbar. Das Ziel des Boilerplates ist es, eine einheitliche und klare Struktur für die Plugin-Entwicklung bereitzustellen. In dem Boilerplate wird keine Funktionalität hinzugefügt, sondern einfach eine Strukturierung und ein Beispiel für Coding-Standards und Best Practices der WordPress-Community gegeben. Es wird starker Gebrauch von der objektorientierten Programmierung mit PHP gemacht, daher sollte man mit dieser ausreichend vertraut sein.

Um das Aufsetzen eines neuen Projekts mit dem WordPress Plugin Boilerplate noch weiter zu vereinfachen, wurde ein einfacher Generator erstellt, der das Umbenennen von Dateien automatisiert. Hier kann man mit wenigen Angaben ein ZIP-Archiv erzeugen lassen und mit diesem direkt starten. Wichtig zu beachten ist hier der “Plugin Slug”. Dies ist ein String, mit dem das Plugin innerhalb des WordPress-Systems referenziert wird. Auch die Dateinamen werden anhand des Slugs erstellt.

Im Folgenden wurde der Slug “pm-example” verwendet.

Die Bootstrap Datei

WordPress durchsucht den /wp-content/plugins Ordner (und alle direkt darin enthaltenen Ordner) nach php-Dateien, die einen speziellen Kommentarblock am Anfang der Datei beinhalten. Dadurch erkennt WordPress diese Datei als Plugin-Datei an und registriert diese im System unter Plugins. In unserem Beispiel ist dies die /pm-example.php. In dieser wird zunächst geprüft, ob die Datei von WordPress aufgerufen wird und die Konstante WPINC definiert ist. Diese Konstante wird immer dann gesetzt, wenn der Inhalt des wp-includes Ordners geladen wird. Im Anschluss werden zwei Hooks für die Aktivierung und Deaktivierung des Plugins registriert und auf entsprechende Klassen im /includes Ordner delegiert (hierzu gleich mehr). Zum Schluss wird die Haupt-Klasse des Plugins geladen und deren run-Methode ausgeführt. Die Bootstrap Datei dient ausschließlich dazu, die Klassen des Plugins aufzurufen, da WordPress keine native Möglichkeit bietet, Klassen als Plugin Startpunkt zu deklarieren.

Plugin Klassen und Ordner

Das Plugin wird in mehrere Ordner unterteilt die hier kurz vorgestellt werden:

  • admin – Beinhaltet alle Dateien, die ausschließlich im Backend geladen und verwendet werden.
  • public – Beinhaltet alle Dateien, die ausschließlich im Frontend geladen und verwendet werden.
  • includes – Beinhaltet die Haupt-Klasse des Plugins und einige vordefinierte Klassen. Hier werden alle global verwendeten Komponenten abgelegt.
  • languages – Beinhaltet die Übersetzungsdateien des Plugins.

Bisher wurden ausschließlich Dateien aus dem includes Ordner aufgerufen. Die Klassen in class-pm-example-activator.php und class-pm-example-deactivator.php beinhalten jeweils eine Methode, die beim Aktivieren bzw. Deaktivieren des Plugins ausgeführt werden. Hier können Initialisierungen (z.B.: Anlegen einer Datenbanktabelle) und Aufräumarbeiten (z.B.: Entfernen von angelegten Datenbanktabellen) implementiert werden. Die Hauptklasse des Plugins in class-pm-example.php instanziiert im Konstruktor sowohl die loader-Klasse als auch die admin– und public-Klasse und registriert über den Loader WordPress Hooks im Backend und Frontend. Der Loader fungiert hier als Wrapper für das Registrieren aller Hooks und ermöglicht so das Debuggen und Verwalten aller registrierten Funktionen des Plugins.

Die Dateien im admin und public Ordner haben eine identische Struktur und laden zu diesem Zeitpunkt jeweils nur eine leere Javascript-Datei und ein leeres Stylesheet. Der partials-Unterordner dient hier nur als Hinweis, wo Templates in der Ordnerstruktur hinterlegt werden sollen.

Man hat nun ausreichend viele Beispiele um die wichtigsten Datei-Typen zu laden und den Quellcode so weiter unterteilen zu können.

Fazit

In dieser Einleitung zum Thema “WordPress Plugin Entwicklung” haben wir kurz erläutert, was ein Plugin ist und wodurch dieses sich von Theme Funktionen unterscheidet. Als Startpunkt haben wir ein Projekt mit Hilfe des WordPress Plugin Boilerplates erstellt und können nun mit der Entwicklung des Plugins starten.

Ausblick

Im zweiten Teil der WordPress Plugin Entwicklung Serie werden wir eine Einstellungs-Seite im Admin-Bereich anlegen und dafür die Settings API kennenlernen.

Über den Autor

Waldemar Schiller

Scroll to Top