Advertisement
  1. Code
  2. Plugins

Zwei Möglichkeiten, um WordPress-Plugins zu entwickeln: Objektorientierte Programmierung

Scroll to top
Read Time: 14 min

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

Wenn es darum geht, WordPress-Plugins zu schreiben, gibt es im Allgemeinen zwei Möglichkeiten: Objektorientierte Programmierung und Funktionale Programmierung (Widgets sind die Ausnahme - wir werden das später in diesem Artikel behandeln).

Obwohl Sie im Allgemeinen Leute haben, die für einen Stil des Programmierens über dem anderen bürgen, jeder präsentiert seine eigenen Vor-und Nachteile.

In dieser zweiteiligen Serie werden Stephen Harris und ich die zwei Möglichkeiten aufschlüsseln, wie Sie WordPress-Plugins schreiben können. Insbesondere werde ich über objektorientierte Programmierung sprechen, und er wird funktionale Programmierung abdecken.

Da das Erfahrungsniveau der Leser unterschiedlich ist, werden wir über das Programmieren auf einer höheren Ebene sprechen. Wenn Sie also Anfänger sind, sollten Sie kein Problem damit haben. Wenn Sie jedoch ein erfahrenerer Entwickler sind, finden Sie möglicherweise später in diesem Artikel weitere nützliche Informationen.

Lassen Sie uns nun einen objektorientierten Ansatz für die Entwicklung von WordPress-Plugins betrachten.


Entwicklung von WordPress Widgets

Wie in der Einleitung erwähnt, können Plugins auf zwei Arten für WordPress entwickelt werden:

  1. Objekt orientierte Programmierung
  2. Funktionale Programmierung

Der zweite Artikel der Reihe wird die funktionale Programmierung behandeln, aber wir werden eine funktionierende Definition der objektorientierten Programmierung geben, so dass wir alle auf dem gleichen Level in diesem Artikel sind.

Wikipedia sagt:

Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das "Objekte" - normalerweise Instanzen einer Klasse - verwendet, die aus Datenfeldern und Methoden zusammen mit ihren Interaktionen bestehen, um Anwendungen und Computerprogramme zu entwerfen.

Diejenigen, die mehr Erfahrung mit der Programmierung von Computern haben, insbesondere jene, die objektorientierte Programmiertechniken verwenden, werden diese Definition wahrscheinlich mögen.

Aber lassen Sie uns es für die Zwecke dieses Artikels simpifizieren:

Objektorientierte Programmierung ist eine Programmiertechnik, die eine Sammlung verwandter Methoden verwendet, um ein Computerprogramm oder einen Teil eines Computerprogramms zu definieren.

Einfach genug, oder? In unserem Fall sind unsere Plugins definitiv Teil eines Computerprogramms, da sie sich in WordPress einklinken.

Wir werden uns den Code im weiteren Verlauf dieses Artikels ansehen, beachten Sie jedoch, dass objektorientierte Programme durch die Gruppierung ihrer verwandten Methoden identifiziert werden, und zwar im Kontext einer Klasse, die wir kurz behandeln werden .

Ein Wort über Widgets

Obwohl es stimmt, dass WordPress-Plugins mit OOP oder funktionaler Programmierung entwickelt werden können, gibt es eine Ausnahme, wenn es um die Entwicklung von Widgets geht.

Gemäß dem Codex-Artikel zum Entwickeln von Widgets soll die folgende Struktur zum Schreiben eines Widgets verwendet werden:

Dies bedeutet, dass alle Widgets mit OOP geschrieben werden sollten. Wenn Sie Code wie den oben genannten nicht gesehen haben, werden wir das im nächsten Abschnitt behandeln und es sollte alles enthalten, was Sie wissen müssen, um zu verstehen, was vor sich geht.


Eine kurze Einführung in OOP

Bevor wir anfangen, OOP-basierte Plugins für WordPress zu entwickeln, wollen wir uns die Grundlagen von OOP etwas genauer ansehen, um sicher zu gehen, dass wir die Terminologie und das Paradigma verstehen.

Klassen

Wie bereits erwähnt, verwendet OOP "eine Sammlung von verwandten Methoden". Aber wir können nicht aufhören. Schließlich macht die funktionale Programmierung das Gleiche.

In OOP sind diese "verwandten Methoden" alle im Zusammenhang mit dem, was eine class genannt wird. In dem obigen Beispiel-Widget sehen Sie das class schlüsselwort als erstes Wort im Code.

Es beginnt auf einer Zeile, die mit einer öffnenden Klammer endet (ähnlich wie Funktionen), und dann kapselt es alle zugehörigen Funktionen ein oder umschließt sie, bevor es mit der schließenden Klammer endet (ignorieren Sie vorläufig das Schlüsselwort extends im Widget-Beispiel) Ich werde das gleich ansprechen.

Eine logische Gruppierung von Funktionen

Wenn Sie gerade mit dem Schreiben von Klassen beginnen und sich fragen, ob eine Funktion zu einer bestimmten Klasse gehört, fragen Sie sich, ob die Funktion wie etwas klingt, das eine bestimmte Klasse tun würde.

Im obigen Widget-Beispiel ist die update methode zum Beispiel offensichtlich etwas, das ein Widget tun würde. Nehmen wir an, Sie schreiben eine Klasse, die für das Lesen eines Blogposts in der WordPress-Datenbank zuständig ist. Es wäre sinnvoll, wenn diese spezielle Klasse eine Funktion namens read oder read_by_id hätte, aber sollte sie eine Funktion namens write haben? Was ist mit delete?

Abhängig davon, wie Sie Ihre Klasse möglicherweise entworfen haben. Aber wenn der einzige Zweck der Klasse darin besteht, Daten zu lesen, dann wahrscheinlich nicht.

Und das ist OOP: Es gruppiert logisch Ihre Funktionen in einer Klasse, aber diese logische Gruppierung hängt von der Verantwortung ab, die Sie Ihrer Klasse geben.

Erweiterte Themen in OOP

OOP ist ein mächtiges Paradigma, das in der WordPress-Anwendung verwendet wird. OOP ermöglicht erweiterte Operationen wie Vererbung (die durch das Schlüsselwort extends in der Widget-Klasse repräsentiert wird), Entwurfsmuster, die im Wesentlichen vorhandene Lösungen für allgemeine Probleme sind.

Dieser Artikel versucht nicht, einen tiefen Einblick in die objektorientierte Programmierung zu geben. Es versucht einfach, eine Grundlage zu bieten, auf der wir die zwei Arten des Schreibens von WordPress-Plugins erforschen können, aber ich erwähne sie hier, sollten Sie daran interessiert sein, weiter in objektorientierte Programmierung einzutauchen.


Entwicklung von klassenbasierten Plugins

Nachdem wir nun objektorientierte Programmierung definiert und gerade genug erforscht haben, um eine Grundlage zu schaffen, ist es an der Zeit, tatsächlich über die Komponenten der OOP-basierten Entwicklung im Kontext von WordPress-Plugins zu sprechen.

Im weiteren Verlauf dieses Artikels werden wir die Grundlagen für das Schreiben von OOP-basierten Plugins und die damit verbundenen Vorteile behandeln.

Definieren der Klasse

Bevor Sie etwas in der objektorientierten Entwicklung tun, müssen Sie Ihre Klasse definieren. Angenommen, Sie haben bereits eine Vorstellung davon, was Ihre Klasse tun wird, dann ist es im Allgemeinen eine Frage von dem, was Sie Ihrer Klasse nennen wollen.

Meistens denke ich, dass das Betrachten von Beispielcode immer von Vorteil ist, wenn Code programmiert wird, also schauen wir uns die WordPress Plugin Boilerplate an.

Beachten Sie, dass das Plugin Boilerplate ein Projekt ist, das ich ursprünglich erstellt habe, um den Einstieg in OOP-basierte Plugins zu erleichtern. Seither wurde es von einer Reihe verschiedener Leute unterstützt. Ich benutze es in diesem Artikel, weil es das Thema zur Hand zeigt.

Beachten Sie, dass die Klassendefinition für das Plugin Boilerplate wie folgt aussieht:

Da das Plugin Boilerplate ein Ausgangspunkt für die Entwicklung ist, würden wir die Klasse natürlich umbenennen. Für diesen Artikel nennen wir es DemoPlugin.

An diesem Punkt sind wir bereit, Funktionen zu definieren, die innerhalb der Klasse leben.

Der Konstrukteur

In OOP ist die erste Funktion, die Sie wahrscheinlich in einer Klasse sehen, eine Funktion namens "der Konstruktor" und PHP ist nicht anders.

Eine einfache, funktionierende Definition des Konstruktors ist dies:

Im Konstruktor initialisieren Sie Daten, die in der gesamten Klasse verwendet werden.

Wie das funktioniert, variiert von Projekt zu Projekt, aber es gibt zwei Dinge, die wir im Kontext eines WordPress-Plugins tun können:

  1. Richten Sie die textdomäne für Lokalisierungszwecke ein
  2. Definieren Sie unsere Aktionen und Filter (speziell unsere Aktionen und unsere Filter).

In unserem DemoPlugin werden wir genau das tun. Wir werden eine Textdomäne des demo-plugin einrichten und Aktionen für die Registrierung und Enqueueing eines Beispiel-Stylesheets und einer Beispiel-JavaScript-Datei registrieren.

Um in unserem Beispiel vollständig zu sein, registrieren wir auch einen Hook, um Text an das Ende des in einem Beitrag angezeigten Inhalts anzuhängen.

Zuerst definieren wir den Konstruktor:

Beachten Sie, dass in PHP ein Konstruktor durch eine öffentliche Funktion namens construct definiert wird, der zwei Unterstriche vorangestellt sind.

Als nächstes definieren wir unsere Textdomäne:

Beachten Sie, dass wir in der obigen Codezeile den Schlüssel für unsere Textdomäne als demo-plugin definiert haben und die Zeile erwartet, dass sie die Lokalisierungsdateien in einem Unterverzeichnis namens lang im Verzeichnis des Plugins findet.

Da die Lokalisierung für diesen Artikel nicht möglich ist, werde ich nicht weiter tauchen, aber Sie können den Quellcode für das Plugin Boilerplate überprüfen, um zu sehen, wie dies eingerichtet wird.

Als nächstes definieren wir die Aktionen für die Registrierung unserer Stylesheets und JavaScript sowie den Filter, der den Text an das Ende unseres Inhalts anhängt:

Wenn Sie mit Aktionen und Filtern nicht vertraut sind, sollten Sie einen meiner letzten Artikel hier auf Wptuts + lesen, da er den Unterschied erklärt.

Wenn Sie nun mit der Entwicklung von WordPress-Theme oder der funktionalen Programmierung vertraut sind, werden Sie wahrscheinlich Folgendes sehen:

Eher, als:

Beachten Sie, dass der Unterschied in den beiden obigen Aufrufen im zweiten Parameter liegt. Insbesondere übergeben wir in unserem Plugin ein Array, während die erste Codezeile einfach einen String übergibt.

Da wir dieses Plugin mit OOP entwickeln, muss WordPress wissen, wo die Methode register_plugin_styles aufgerufen werden muss. Da es in unserer Klasse lebt, müssen wir WordPress anweisen, die Methode für eine Instanz unserer Klasse aufzurufen.

Sinn ergeben?

Im Wesentlichen sagen wir WordPress: Ich habe diese Methode namens register_plugin_styles, aber Sie müssen es für eine Instanz dieser Klasse aufrufen (daher das Schlüsselwort this).

Wenn Sie neu in WordPress sind, aber aus einem Programmierhintergrund kommen, dann können Sie sich vorstellen, dass Sie WordPress dazu auffordern:

Wie auch immer, die Quintessenz ist, dass wenn Sie Ihre Plugins mit OOP entwickeln, Sie Ihre Hooks mit einem Array mit zwei Indizes registrieren müssen: Der erste ist $this und der zweite ist der Name der Funktion.

Eine Anmerkung zu Pass-by-Reference und Pass-by-Value

Fortgeschrittene Entwickler werden mit der Fähigkeit von PHP vertraut sein, Pass-by-Reference und Pass-by-Value zu übergeben. In WordPress Development ist es nicht ungewöhnlich, Folgendes zu sehen:

Wo this durch Bezugnahme passiert ist; Ab PHP 5.4 wurde jedoch die Möglichkeit, Variablen zum Zeitpunkt des Aufrufs als Referenz zu übergeben, entfernt. Aus diesem Grund wird in diesem Lernprogramm der Wert angegeben.

Funktionen

In der Programmierung sind Funktionen die Einheiten des Codes, die im Wesentlichen für "etwas tun" verantwortlich sind. In der objektorientierten Programmierung ist es hilfreich, sie etwas anders zu denken.

In OOP werden Klassen normalerweise durch Substantive repräsentiert. In unserem Fall haben wir ein DemoPlugin. Ähnlich sind Funktionen oft Verben. Das heißt, sie sind Handlungen, die unser Substantiv übernehmen kann. An dieser Stelle haben wir uns bereits entschieden, die folgenden Funktionen zu definieren:

  • register_plugin_styles
  • register_plugin_scripts
  • append_post_notification

Beachten Sie, dass jeder Funktionsname eine Aktion darstellt, die ausgeführt werden kann. Dies ist eine gute Faustregel zum Schreiben von Funktionen.

In der funktionalen Programmierung gibt es wirklich nur die Idee von Funktionen; In OOP gibt es jedoch verschiedene Arten von Funktionen, von denen zwei "öffentliche" Funktionen und "private" Funktionen sind.

Öffentliche Funktionen

Öffentliche Funktionen sind Funktionen, auf die außerhalb der Klasse zugegriffen werden kann. Dies bedeutet, dass Sie diese Methoden aufrufen können, sobald Sie die Klasse instanziiert haben.

Dies ist genau das, was wir zuvor im folgenden Code gemacht haben:

Grundsätzlich sind diese Funktionen für die Öffentlichkeit zugänglich (wo die Öffentlichkeit ein Programmierer oder ein anderes Objekt sein kann).

Die Funktionen, die wir für die Registrierung unserer Stylesheets, unseres JavaScript, schreiben und die wir schreiben, um Text an einen Beitrag anzuhängen, müssen als öffentlich markiert werden, da sie von einem Dritten aufgerufen werden - WordPress.

Definieren wir die zwei Funktionen für die Aktion wp_enqueue_scripts:

Beachten Sie, dass diese beiden Funktionen erwarten, dass sich css und js in den Unterverzeichnissen css und js befinden. Um dies in Aktion zu sehen, denken Sie daran, das Plugin Boilerplate zu überprüfen.

Abschließend definieren wir die Funktion für den the_content filter:

Beachten Sie, dass wir die __ function verwenden, um sicherzustellen, dass unser Skript mit der textdomain lokalisiert ist, die wir im Konstruktor definiert haben.

Private Funktionen

Wenn öffentliche Methoden für jedermann zugänglich sind, würde dies bedeuten, dass private Funktionen von niemandem zugänglich sind, oder? In den meisten Fällen ist das korrekt: Die einzige Person - oder Sache -, die private Methoden aufrufen kann, ist die Klasse, in der sie definiert sind.

Das bedeutet, dass WordPress, Objekte von Drittanbietern oder Programmierer programmgesteuert private Funktionen aufrufen können. Private Funktionen können nur innerhalb der Klasse aufgerufen werden, in der sie verwendet werden.

Im Allgemeinen sind private Funktionen beim Schreiben von Hilfsmethoden sehr nützlich - das heißt, sie sind nützlich, um Daten intern zu manipulieren, damit eine andere Funktion ihre Aufgabe ausführen kann.

Um ein funktionierendes Beispiel zu geben, definieren wir eine private Funktion, die eine lokalisierte Zeichenfolge zurückgibt, die unsere append_post_notification-Funktion verwenden kann:

Lassen Sie uns als nächstes die Funktion append_post_notification umgestalten, um diesen neuen Helfer aufzurufen:

Beachten Sie, dass wir die erste Funktion durch Hinzufügen einer zweiten Funktion vereinfacht haben. Sie könnten auch argumentieren, dass wir die Lesbarkeit der ursprünglichen Funktion verbessert haben, indem Sie einer Funktion einen Aufruf mit einem Namen hinzugefügt haben, der zur Klärung beiträgt, was passiert.

Vielleicht ist die wichtigste Sache, die Sie beachten sollten, dass Sie, um private Funktionen aufzurufen, dem Funktionsaufruf das $this-Schlüsselwort und das -> vorangestellt haben müssen. Dies sagt PHP: "Rufen Sie die Funktion get_localized_notification auf, this in dieser Klasse lebt."

Auf jeden Fall haben wir jeder Methode eine einzige Verantwortung zugewiesen - eine weitere gute Praxis in der objektorientierten Programmierung - und wir haben die Verwendung von öffentlichen und privaten Funktionen demonstriert.

Andere Funktionstypen

In der objektorientierten Programmierung gibt es auch andere Arten von Funktionen, die den Rahmen dieses Artikels sprengen würden.

Um es zu vervollständigen, wollte ich sie hier zusammenfassen:

  • Statische Funktionen sind Funktionen, für die keine Instanz einer Klasse aufgerufen werden muss. Stattdessen können Sie sie einfach direkt auf den Namen der Klasse aufrufen. Zum Beispiel: DemoPlugin::use_this_static_method().
  • Geschützte Funktionen sind wie private Funktionen mit Ausnahme von Unterklassen. Das heißt, die einzigen Objekte, die auf geschützte Funktionen zugreifen können, sind Unterklassen der gegebenen Klasse. Diese spezielle Art von Funktion spielt in das Konzept der Vererbung, die bereits erwähnt wurde.

Vorteile in WordPress

An dieser Stelle haben wir alle hohen Noten für objektorientierte WordPress-Entwicklung getroffen. Um die Vorteile zusammenzufassen:

1. Alle Funktionen sind im Kontext

Wenn Sie die objektorientierte Programmierung verwenden, müssen Sie der Funktion weder den Namen des Themas oder den Namen des Plugins, an dem Sie gerade arbeiten, vorgeben, noch müssen Sie sich Gedanken darüber machen, ob eine Funktion benannt werden soll eine WordPress-Funktion, eine andere Theme-Funktion oder eine andere Plugin-Funktion.

Stattdessen leben alle Funktionen im Kontext einer anderen Klasse. Sicher ist nur, dass Ihre Klasse nicht als etwas bezeichnet wird, das mit einer anderen bestehenden Klasse interferiert.

2. Sie außerhalb der API aufrufen

Mithilfe der objektorientierten Programmierung können Sie Ihr Plug-in programmatisch von außerhalb der Standard-WordPress-API aufrufen.

Angenommen, Sie entwickeln ein Design und möchten, dass etwas in der Seitenleiste gerendert wird, die von Ihrem Plug-in bereitgestellt wird. In der Sidebar-Vorlage können Sie Ihr Plugin tatsächlich instanziieren und anschließend Methoden aufrufen, um Informationen in die Seitenleiste zu schreiben.

Dies ist besonders nützlich, wenn Sie an einer Vorlage arbeiten und einige Standarddaten bereitstellen möchten, wenn der Benutzer nicht manuell etwas eingibt.


Fazit

Wie wir am Anfang des Artikels gesagt haben: Dies ist nur eine Möglichkeit, wie Sie Ihre WordPress-Plugins entwickeln können. Stephen's Artikel wird zeigen, wie man es mit funktionaler Programmierung macht.

Nachdem Sie diesen Artikel gelesen haben, sollten Sie die objektorientierte Programmierung und deren Vorteile besser verstehen und Sie sollten in der Lage sein, Code in der Widget-API, in meiner verwandten Widget-Boilerplate und sogar überall in der WordPress-Codebasis zu befolgen.


Ressourcen

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.