1. Erfolgreich ein WordPress Plugin erstellen

Schritt für Schritt ein eigenes WordPress Plugin programmieren

Band 1

Dipl. Ing. (FH) Florian Simeth

Impressum

Copyright: © 2015 – 2017 Dipl. Ing. (FH) Florian Simeth

Dipl. Ing. (FH) Florian Simeth
Fürbergring 13
94259 Kirchberg i. Wald
Web: wp-plugin-erstellen.de
E-Mail: florian@wp-plugin-erstellen.de

Umschlaggestaltung:
Simeth Florian; Joachim Ciliox, AnzeigenSpezialist.de

Satz und Layout:
Florian Simeth

Umschlagbild:
© Michael Rosskothen – Fotolia.com

1 Auflage; Januar 2015

2 Auflage; Januar 2017

Diese Online-Ausgabe wird ständig überarbeitet.

Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.

Ebenso wurden die in diesem Buch angegebenen Internet-Adressen und -Dateien vor Drucklegung geprüft (Stand: Januar 2015). Der Verlag, die Autoren und Übersetzer übernehmen keine Gewähr für die Aktualität und den Inhalt dieser Adressen und Dateien und solcher, die mit ihnen verlinkt sind.

Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen. Der Verlag und die Autoren richten sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Bei den in diesem Buch abgebildeten Firmenlogos, Anzeigen, Anzeigenausschnitten, Internetseiten und Produktabbildungen handelt es sich ausschließlich um Anschauungsbeispiele. Es wird ausdrücklich darauf hingewiesen, dass eine Vervielfältigung und Nutzung zu anderen Zwecken nicht gestattet ist.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Index

Zu Anfang

Dank

Melanie, danke, dass du mir den Mut gemacht hast, dieses Buch zu schreiben.

Vorwort

Vielen Dank, dass Sie sich für dieses Buch entschieden haben. Ich gehe davon aus, dass Sie von WordPress bereits Vieles gehört haben. Es ist mittlerweile zum weit verbreitetsten System zur Verwaltung von Webseiten geworden. Über ein Drittel aller Internetseiten werden via WordPress bereitgestellt. So zumindest die Aussage der Redaktion von w3techs.com, die regelmäßig Umfragen zu allen gängigen Web-Technologien durchführt1. Kein anderes System hat mehr Marktanteil. Und dem kann man ruhig Glauben schenken, wenn man bedenkt, dass mittlerweile Größen wie CNN, The New York Times oder eBay WordPress erfolgreich einsetzen.

Fünfzehn Jahre lang steht WP, wie WordPress oft kurz genannt wird, nun schon zum Download bereit. Im Januar 2004 gab es Matt Mullenweg für die globale Verwendung frei. Es entstand aus dem Weblogsystem b2/cafelog, welches zur damaligen Zeit nicht mehr weiterentwickelt wurde. Daraus ließe sich ableiten, dass WordPress lediglich ein Blogging-System wäre. Über die Jahre hat sich allerdings sehr viel getan.

Da WordPress als Open-Source verfügbar ist, wurde es nicht nur für Unternehmen, sondern auch für jeden Individualisten einfach, eine Website zu erstellen und zu bearbeiten. Letztlich war genau das auch die Intention von Matt: Eine Website soll von jedem sehr einfach und kostengünstig erstellt und verwaltet werden können. Die konstante Weiterentwicklung, die sehr starke Verbreitung und nicht zuletzt die Unterstützung der gesamten Community haben dazu geführt, dass aus WP ein umfangreiches Content-Management-System, kurz CMS, geworden ist.

Mittlerweile existieren mehr als 55.000 Plugins (Stand: April 2019) alleine in der kostenlosen Plugin-Datenbank auf wordpress.org. Zum Vergleich: Anfang 2014 waren es noch 28.000 und im Janaur 2017 ca. 48.000. Dem Ideenreichtum der Benutzer scheinen keine Grenzen gesetzt zu sein. Dazu kommt, dass auch der kommerzielle Plugin-Markt (also alle nicht-kostenlos erhältlichen Plugins) stetig wächst. 2016 gab es 1,48 Milliarden Downloads2. Das entsprach einem Wachstum von 34%. Tendenz steigend.

WordPress macht es einem Entwickler aber auch wirklich einfach, Erweiterungen zu programmieren. Doch auch nach fünfzehn Jahren gibt es ein großes Problem: Die Dokumentation ist noch immer unvollständig und auf Deutsch nicht verfügbar. Solche Inhalte lassen sich zwar auch kostenlos im Netz finden. Diese sind jedoch oft weit verstreut, in kleine Code-Schnipsel zerteilt und nicht selten einfach so alt, dass sie in einem neuen Plugin gar nicht mehr funktionieren würden. Deshalb möchte ich mit diesem Buch einen Einblick in die WordPress-Plugin-Programmierung und geben und mit der erweiterten Fassung einen Überblick über alle Schnittstellen (APIs) geben und aktuelle Beispiele aufzeigen.

Viel Spaß beim Coden!

Einführung

WordPress ist wohl deshalb so populär, weil es kostenlos ist. Die Open-Source Software lässt sich herunterladen, verändern oder weiterverbreiten. Und mindestens genauso einfach ist es, die Funktionalität durch Plugins zu erweitern.

Ein sehr früher Meilenstein in der Entwicklung von WordPress war, dass es schon in Version 1.2, die bereits vier Monate nach der ersten Version veröffentlicht wurde, die Möglichkeit der Erweiterung durch Plugins vorsah. Dadurch war es möglich, WordPress so zu modifizieren, dass es den eigenen Vorstellungen entsprach. Der große Vorteil dabei war, damals wie heute, dass der eigentliche Quelltext von WordPress (kurz: der „Core“, engl. für „Kern“) dabei nicht angetastet werden musste.

Für Plugin-Entwickler ist eine solche Konstellation unglaublich effizient. Denn man muss sich nur noch auf die Programmteile konzentrieren, mit denen man sich persönlich auskennt. So lässt sich zum Beispiel die Funktion wp_mail() ganz einfach nutzen, um Mails zu versenden. Es ist nicht unbedingt nötig, zu wissen wie die Funktion intern arbeitet. Dennoch ist es aber auch möglich, direkt in das Verhalten von wp_mail() einzugreifen, ohne die Grundfunktion an sich zu verändern.

Auch wenn die kostenlose Plugin-Datenbank auf wordpress.org eine schier unendliche Masse an Erweiterungen bereitstellt, werden Sie bald feststellen, dass es Plugins gibt, die nicht mehr funktionieren, nicht mehr weiterentwickelt werden oder nicht genau den Funktionsumfang haben, den Sie gerade benötigen. Es liegt also nahe, sich ein eigenes Plugin oder zumindest eine Abwandlung eines vorhandenen Plugins selbst zu programmieren.

Wer soll dieses Buch lesen?

Dieses Buch wurde in erster Linie für Webentwickler geschrieben, die in Zukunft mit WordPress arbeiten wollen. Es soll die Entwicklung eines WordPress-Plugins von Grund auf beschreiben, setzt aber auch ein bestimmtes Vorwissen (siehe unten) voraus.

Es kann aber auch dazu benutzt werden, das eigene Wissen zu erweitern. Egal ob man haupt- oder nebenberuflich bereits mit WordPress zu tun hat oder hatte. Es kann nie schaden, zu wissen was „unter der Haube“ steckt und wie man letztlich so eingreifen kann, dass die „Maschine“ genau das tut, was man gerne möchte.

Oder Sie sind ein Blogger der sich dafür interessiert, wie die eigene Bloggingplattform tickt und wie man sie selbst anpassen kann. Wer weiß, vielleicht schreiben Sie eines Tages sogar selbst in die Online-Dokumentation von WordPress und erklären den Lesern die einzelnen Funktionen. Auch das kann ein Anreiz sein und ist im übrigen gar nicht so abwegig. Schon 2015 – auf dem WordCamp in Köln – saß ich in einem Vortrag in dem erwähnt wurde, dass viele zukünftige Programmierer heute direkt von WordPress zu PHP kommen.

Letztlich ist es ein Buch für all diejenigen, die WordPress selbst erweitern möchten.

Was Sie benötigen

Dieses Buch setzt voraus, dass Sie bereits im Besitz eines Webservers oder eines einfachen Webspeicherplatzes sind, auf dem WordPress installiert ist. Dass die 5-Minuten-Installation so einfach ist, dass auch der Laie damit zurechtkommt, dürfte sich längst herumgesprochen haben. Viele Webhoster bieten mittlerweile auch automatische Installationsroutinen an. Damit lässt sich WordPress noch schneller und oft in weniger als ein paar Sekunden installieren.

Um alles etwas einfacher zu gestalten, wäre es von Vorteil, wenn Ihre WP-Installation auf Ihrem lokalen Rechner läuft (localhost). Das macht es Ihnen leichter, ein Plugin zu entwickeln. Mit den kostenlosen Tools MAMP (für Mac OS X), WAMP (für Windows) oder LAMP (für Linux) ist das in wenigen Augenblicken geschehen. Natürlich funktioniert das auch mit virtuellen Maschinen. Auch hierfür existieren Anwendungen wie „Local by Flywheel“.

Das Herz dieses Buches bilden die großen und kleinen Code-Ausschnitte (kurz: Schnipsel). Fast alle Schnipsel sind in PHP geschrieben und oft mit HTML ausgezeichnet. Sie sollten deshalb zumindest einfachen PHP-Code lesen und schreiben können. Sie müssen jedoch kein Guru im Umgang mit PHP sein. Ich werde versuchen, schwierigen Code soweit es geht so zu beschreiben, dass Sie ihn verstehen können.

Ab und an werden Sie ebenfalls auf Datenbankabfragen stoßen, die allesamt mit MySQL beschrieben werden. Grundkenntnisse in der Syntax dieser Sprachen helfen Ihnen, mehr zu verstehen.

Dies gilt auch für die Abschnitte, die Javascript-Inhalte behandeln. Die Stichwörter hier sind jQuery sowie AJAX. Aber Achtung: Seit Ende 2018 (mit Erscheinen der Version 5.0) setzt WordPress immer mehr auf JavaScript. Dort explizit auf den Einsatz von React. PHP wird dementsprechend immer unwichtiger (aber nicht vernachlässigbar) werden. Ich erzähle Ihnen gleich noch etwas mehr darüber.

Was dieses Buch beinhaltet

Während der Entstehung dieses Buches stand WordPress 4.1 in den Startlöchern. Mittlerweile sind wir bei Version 5.2 angekommen. Bis Ende 2016 erschienen ungefähr drei Hauptversionen pro Jahr die immer wieder neue Möglichkeiten mit sich brachten. Mullenweg hat sich dann allerdings von diesem Release-Zyklus verabschiedet und den Fokus auf drei Dinge gelegt: Design, Editor und REST-API.

Die REST-API fand in Version 4.4 Einzug in den Core. Sie enthielt zum ersten mal die Infrastruktur, die dann in Version 4.7 noch um die so genannten Content-Endpoints erweitert wurde. Damit war es zum ersten Mal möglich, WordPress-Inhalte über eine Schnittstelle abzurufen oder zu verändern. Das ermöglicht z.B. das Abrufen von Daten über externe Software. Auch ist es damit möglich, WordPress headless (also „kopflos“) ohne Frontend zu betreiben oder das Frontend in einer komplett anderen Technologie (z.B. mit ReactJS) zu betreiben. Seit Version 5.0 geschieht dies auch massenhaft. Mit der Einführung des neuen Block-Editors (getauft „Gutenberg“) wird fast ausschließlich in JavaScript (bzw. React) für diesen Editor entwickelt.

In den letzten Jahren wurden viele PHP-Funktionen zu so genannten APIs (engl. für Application Programming Interface) zusammengefasst und viele – wie z.B. die REST-API – kamen neu hinzu. Sie sollen den Umgang mit WordPress erleichtern und stellen gleichzeitig sicher, dass sie auch noch in zukünftigen Versionen funktionieren werden.

In den letzten zwei Jahren habe ich viele Rezensionen von meinen Käufern gesammelt. Eine Rezension ist mir dabei im Kopf geblieben. Der Verfasser meinte, dass das eBook für ihn zu sehr eine Funktionsreferenz als ein Lernbuch sei. Diese Meinung habe ich – bis jetzt – zwar nur einmal gehört, dennoch habe ich mir die Frage oft selbst gestellt: „Ist es wirklich zu sehr eine Funktionsreferenz? Und wenn ja: kann ich es anders machen? Oder anders gefragt: muss ich das überhaupt?“

Diese Frage hat sich über die letzten zwei Jahren dann selbst beantwortet. Und zwar aus einer ganz anderen Schiene heraus. Ich war auf der Suche nach guten WordPress Entwicklern. Fast alle von ihnen schworen darauf, WordPress zu kennen und ein guter Entwickler zu sein. Letzteres war dabei immer der Fall. Erstens leider nicht. Herausfinden konnte ich das, weil ich einigen Entwicklern eine Testaufgabe gab. Sie sollten einen UNIX-Zeitstempel relativ zur aktuellen Zeit lesbar zu machen. Ich wollte also darstellen, dass z.B. ein Zeitstring von einem Kommentar so dargestellt wird:

geschrieben vor x Sekunden

oder

geschrieben vor x Minuten

oder

geschrieben vor x Stunden.

Je nachdem, was für den Menschen besser lesbar wäre.

Fast alle Entwickler schrieben dafür ihre eigene PHP-Funktion. Dabei wäre es so einfach gewesen. In WordPress gibt es die Funktion nämlich schon. Sie nennt sich human_time_diff().

Aus diesem Grunde werde ich weithin in diesem Buch versuchen, so viele interne WordPress-Funktionen wie möglich zu beschreiben. Natürlich mit möglichst ausführlichen Beispielen.

PHP und JavaScript

Aus Erfahrung weiß ich, dass gerade viele der kleineren Code-Schnipsel auch in Zukunft noch voll funktionsfähig sein werden. Mein erstes, kostenloses und ins WordPress-Plugin-Verzeichnis eingetragenes Plugin ging online, als Version 3.3 aktuell war. Ohne viel zu verändern, funktioniert es noch heute tadellos. Zwar handelt es sich dabei nur um ein sehr kleines Script, der Grund, warum es heute noch funktioniert, ist vermutlich aber ein anderer: Einmal eingeführte Funktionen werden bei einem Versionssprung von WordPress nicht einfach entfernt. Stattdessen wird versucht, dem Entwickler eine Fehlermeldung anzuzeigen, die auf den Missstand hinweist.

Letzteres stellt aber auch ein Problem dar. Durch die Rückwärts-Kompatibilität hat sich WordPress aus PHP-Sicht nicht stark weiterentwickelt. Enwturfsmuster (wie MVC, Singleton, Dependency Injection, etc.) gibt es in WordPress kaum bis gar nicht. So wurde WordPress zum jetzigen Stand fast ausschließlich funktionell programmiert. Dennoch gibt es ein paar Klassen die Sie in diesem Buch ebenfalls kennen lernen werden.

Dass sich WordPress PHP-technisch nicht weiterentwickelt hat ist sicherlich auch der Grund warum es in den StackOverflow-Umfragen von Entwicklern mittlerweile zur „most dreaded“, also zur „unbeliebtesten“ Web-Plattform gewählt wurde.

„Web Platform“ ist an dieser Stelle ein gutes Wort. Denn das beliebte CMS ist mittlerweile nicht mehr nur ein Content-Managment-System. Tatsächlich hält immer mehr JavaScript Einzug in WordPress. Allen voran das Framework ReactJS.

Die Struktur dieses Buches

Ich habe das Buch gedanklich in zwei Bände geteilt. Der erste Band liegt Ihnen gerade vor und gibt im ersten Kapitel einen Überblick über das Arbeiten mit WordPress und geht im zweiten Kapitel in einen allgemeinen Leitfaden zur Plugin-Entwicklung über.

Das dritte Kapitel bespricht die sogenannten Hooks. Das Verständnis der Hooks ist Voraussetzung für die Programmierung von Plugins mit WordPress und ist damit ein ideales Grundgerüst für den Start.

Angefangen mit dem Kapitel Plugin-Integration werde ich alle gängigen APIs beschreiben. Von der Dashboard-Widget API, über die HTTP-API bis hin zur Rewrite-, Shortcode- und Widget-API. Diese Kapitel können in der Reihenfolge gelesen werden, wie Sie sie benötigen, wohingegen die ersten drei Teile jeweils aufeinander aufbauen.

Der Quellcode

Während Sie im Buch lesen, können Sie entweder den Quellcode der einzelnen Code-Schnipsel direkt abtippen oder ganz einfach kopieren, indem Sie dem jeweiligen Link folgen. All diese Inhalte finden Sie auf Github. Sie sind frei erhältlich und können jederzeit kostenlos von Ihnen benutzt werden. Beachten Sie, dass ich keinerlei Verantwortung für die Richtigkeit der Code-Schnipsel übernehmen kann, falls diese in den produktiven Einsatz gelangen sollten.

Fehler im Quellcode

Ich versuche, möglichst alle Inhalte fehlerfrei zu halten. Aber natürlich ist niemand perfekt. Wenn Sie einen Fehler im Buch oder in einem Quellcode finden, lassen Sie es mich bitte wissen. In Zeiten von eBooks sind diese relativ schnell ausgebessert. Somit steigt nicht nur die Qualität dieses Buches. Zusätzlich ersparen Sie einem anderen Leser vielleicht eine stundenlange Fehlersuche.

Sie glauben, Sie haben einen Fehler gefunden? Sicherlich haben Sie bereits einen Github Account, der es Ihnen erlaubt, diesen selbst zu beheben oder Kommentare zu hinterlassen. Ansonsten schreiben Sie bitte direkt an florian [a t] florian-simeth.de.

Vielen Dank!

  1. http://w3techs.com/technologies/overview/contentmanagement/all/ Stand: Dezember 2013 Stand: Oktober 2014 ↩︎
  2. https://twitter.com/post_status/status/805160669733654528 ↩︎

4 Kommentare zu “1. Erfolgreich ein WordPress Plugin erstellen

  1. Hallo Florian,

    Ich weiß nicht bei welchen Kapitel ich das schreiben soll, daher schreibe ich es hier einmal dazu.
    Ich habe jetzt ein Form, dass wenn ich es abschicke eine php Datei aufruft und die Daten verarbeitet. Ich schicke im Json format , wenn das Script fertig ist Informationen (Fehlermeldungen, …) zurück. Wie kann ich im WP diese Anfangen und darstellen. In meinem Plugin kann ich errors mit die() darstellen. Da erscheint ein Fenster mit dem text. So würde ich das auch gerne machen, wenn das script Informationen zurückschickt.

    lg
    Andreas

  2. Hallo Florian,

    Mein Problem ist, wenn ich ein json von meinen script schicke, bekomme ich einen leeeren Bildschirm mit den Json daten angezeigt. Ich weiß nicht wie ich das abfabgen soll, damit ich einen Hinweis bauen kann.

  3. Ich verstehe leider nicht, was du genau erreichen willst. Wenn du JSON zurück gibst, dann ist mir klar, dass nur JSON ausgegeben wird 😉 Abfangen kannst du das mit PHP nicht. Entweder du gibst JSON zurück oder du gibst HTML zurück. Du könntest Daten via Ajax (z.B. mit jQuery) nachladen und das JSON dort entgegen nehmen.