Objektorientierter Code kann unter anderem dabei helfen, Ihren Code zu organisieren und wiederverwendbar zu machen. In diesem Tutorial werde ich Ihnen die Grundlagen des Schreibens eines WordPress-Plugins anhand objektorientierter Techniken zeigen. Wir werden die Dribbble-API als Beispiel für dieses Tutorial verwenden. Bereit?
Bevor Sie mit diesem Tutorial fortfahren, sollten Sie zumindest ein grundlegendes Verständnis für das Schreiben eines WordPress-Plugins besitzen. Jonathan hat ein erstaunliches Tutorial über "Wie schreibt man ein WordPress-Plugin" geschrieben. Lies es vor.
Das Erstellen von WordPress-Plugins mit objektorientiertem Code ist im Vergleich zu prozeduralem Code recht effizient und aufgeräumt. Es ist einfacher, die Codebasis zu verwalten und mithilfe von Vererbungstechniken zu erweitern, was besonders beim Schreiben eines großen Plugins hilfreich sein kann.
Um ein WordPress-Plugin zu schreiben, benötigen wir zunächst einen Orientierungssinn. Wir werden ein Plugin schreiben, das die neuesten Aufnahmen von Dribbble mit ihrer REST-API anzeigt. Anschließend werden Shortcodes für Posts und Widgets sowie Template-Tags für Designs hinzugefügt.
Objektorientierter Code basiert auf Klassen und Methoden (Funktionen). Lassen Sie uns unsere Kernklasse erstellen, die mit den Hooks und Filtern von WordPress interagiert.
Klasse WPDribbble öffentliche Funktion __construct () $ wpDribbble = new WPDribbble ();
PHP-Klassen haben eine Konstruktorfunktion, __konstruieren
, Wird ausgeführt, sobald eine neue Instanz einer Klasse instanziiert wird. Alle WordPress-Hooks und -Filter werden unter dem Konstruktor unserer Plugin-Klasse registriert. Lasst uns einen Shortcode für unser Plugin vorschieben und registrieren. Das add_shortcode ()
function / hook geht unter die Konstruktorfunktion.
Die neue Instanz einer Klasse / eines Objekts wird mit der registriert Neu
Stichwort. Beziehen Sie sich auf die letzte Zeile im nachstehenden Code.
Klasse WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); public function shortcode () $ wpDribbble = new WPDribbble ();
Beachten Sie, wie wir eine verwenden
Array
im Callback-Funktionsparameter? Um Callback-Funktionen in einem Objekt zu registrieren, müssen wir einArray
.
Das erste Element des Arrays referenziert das Objekt via $ das
. Der zweite Punkt in der Array
ist der Methodenname innerhalb der Klasse. Alle Hooks und Filter müssen innerhalb einer Klasse auf diese Weise referenziert werden.
# 1. Standardgebrauch add_shortcode ('shortcode_name', 'shortcode_func'); function shortcode_func () // Der Inhalt dieser Funktion wird ausgeführt, wenn der Blogger // den Shortcode [shortcode_name] verwendet. # 2. Mit PHP 5.3 können wir eine anonyme Funktion übergeben. add_shortcode ('shortcode_name', function () // Der Inhalt dieser Funktion wird ausgeführt, wenn der Blogger // den [shortcode_name] shortcode verwendet.); #3. Innerhalb einer Klasse class WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); public function shortcode () // Der Inhalt dieser Funktion wird ausgeführt, wenn der Blogger // den Shortcode [shortcode_name] verwendet.
Da wir derzeit keine ausgefallenen API-Funktionen benötigen, erstellen wir einen recht einfachen API-Wrapper für Dribbble. Es gibt bereits eine Bibliothek für Dribbble, aber für dieses Tutorial schreiben wir unsere eigene. Es wird Ihnen helfen, die Konzepte hinter diesem Tutorial zu verstehen.
Wir werden eine DribbbleAPI schreiben Objekt
, und registrieren ein Methode
namens getPlayerShots ()
mit der Dribbble-API zu interagieren und eine Array
der neuesten Aufnahmen.
Erstellen wir für diese Klasse eine neue Datei mit dem Namen DribbbleAPI.php
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble-Benutzername oder Benutzer-ID protected $ user;
Wir richten oben zwei Klassenvariablen ein.
__konstruieren
) Methode.class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble-Benutzername oder Benutzer-ID protected $ user; öffentliche Funktion __construct ($ user) $ this-> user = $ user;
Der Konstruktor wird übergeben a $ Benutzer
Variable, die dann vom Konstruktor an die Klasseneigenschaft übergeben wird, die aufgerufen wird Nutzer
.
Der Eigenschaft oder dem Variablennamen wird das Präfix vorangestellt Öffentlichkeit
um anzugeben, dass der Wert dieser Eigenschaft von außerhalb abgerufen werden kann Klasse
. Wenn wir stattdessen nur den Zugriff auf die Immobilie einschränken möchten Klasse
, und vielleicht auch Klasse
Wenn das erbt, verwenden wir die geschützt
Präfix. Diese Praxis wird als Einkapselung bezeichnet.
Wir haben die Basis für unseren Dribbble API-Wrapper. Jetzt schreiben wir ein neues Methode
, namens getPlayerShots ()
. Der Zweck davon Methode
Abfragen der API und Konvertieren des Ergebnisses in eine Array
zur Verwendung in unserem Plugin.
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble-Benutzername oder Benutzer-ID protected $ user; öffentliche Funktion __construct ($ user) $ this-> user = $ user; public function getPlayerShots ($ perPage = 15) $ user = $ this-> Benutzer; $ json = wp_remote_get ($ this-> apiUrl. 'players /'. $ user. '/ shots? per_page ='. $ perPage); $ array = json_decode ($ json ['body']); $ shots = $ array-> shots; $ schüsse zurückgeben;
Weitere Informationen zu wp_remote_get.
Das getPlayerShots
Funktion holt den Benutzer aus der Klassenvariablen. Es verwendet WordPress ' wp_remote_get
Funktion zum Abfragen der Dribbble-API. Die API antwortet dann auf unsere Abfrage mit einer JSON-Zeichenfolge, die dann in eine Parser-Syntax analysiert wird Array
und mit der Taste an die Funktion zurückgesendet Rückkehr
Stichwort.
Das ist alles, was wir im Moment von der API verlangen - einfach eine Array
von Spielerschüssen. Wenn wir in Zukunft mehr Funktionalität benötigen, können wir entweder weitere hinzufügen Methode
s zum Strom Klasse
, oder ein neues erstellen Klasse
das reicht dieses aus. Dies wird wiederum als Vererbung bezeichnet.
DribbbleAPI
KlasseDas ist der lustige Teil. das frisch gebackene DribbbleAPI
Klasse
wird in Gebrauch kommen. Wir werden die von der API abgerufenen Einstellungen durchlaufen und eine html
Liste der Aufnahmen, die an den Shortcode und den Template-Tag weitergeleitet werden. Während der Schleife werden die Dribbble-Bilder in voller Größe zwischengespeichert und im Plugin-Ordner gespeichert. Die Miniaturansichten werden mit TimThumb erstellt.
Um festzustellen, ob die vollständigen Bilder bereits lokal gespeichert sind, Plugin-Pfad
Wird benötigt. Auch um die Thumbnails mit zu erzeugen Timthumb
, das Plugin-URL
Wird benötigt. Zu diesem Zweck erstellen wir zwei Klassenvariablen namens pluginPath
und pluginURL
in unserer WPDribbble
Klasse, und legen Sie dann ihre Werte innerhalb des Konstruktors fest Methode
.
Klasse WPDribbble protected $ pluginPath; protected $ pluginUrl; public function __construct () // Plugin-Pfad setzen $ this-> pluginPath = dirname (__ FILE__); // Setze die URL des Plugins $ this-> pluginUrl = WP_PLUGIN_URL. '/ wp-Dribbble'; add_shortcode ('Dribbble', Array ($ this, 'shortcode'));
getImages ()
MethodeErstelle eine neue Methode
innerhalb des WPDribbble
Klasse
, namens getImages.
In einem
Klasse
, Sie können generische Namen für Funktionen verwenden. Sie stehen nicht in Konflikt mit anderen Plugins oder den in WordPress integrierten Funktionen, da sie unter derKlasse
Namespace.
öffentliche Funktion getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true)
$ Benutzer
wird verwendet, wenn eine neue Instanz von registriert wird DribbbleAPI
Klasse.$ Bilder
wird verwendet, wenn die API über das API abgefragt wird getPlayerShots
Methode.Als nächstes werden wir die DribbbleAPI
Klasse in der getImages ()
Funktion, und erstellen Sie eine neue Instanz davon, um die Bilder zu greifen.
öffentliche Funktion getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = new DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ images); if ($ shots)
Das $ schüsse
Variable im Code wird mit einem gefüllt Array
von drei aktuellen Dribbbles aus dem $ Benutzer
.
Wie bereits erwähnt, werden wir uns durch die $ schüsse
Array
, Speichern Sie die Bilder in voller Größe lokal zum Zwischenspeichern. Die zwischengespeicherten Bilder werden mit TimThumb verwendet, um die Miniaturbilder zu liefern. Erstellen Sie zwei Ordner, um von TimThumb generierte Vollbilder und Miniaturbilder zu speichern. Wir werden verwenden Vollbilder /
zum Speichern von Bildern in voller Größe und Zwischenspeicher/
für die Miniaturansichten, da dies der Standardordnername für TimThumb ist.
Der HTML-Code für die Liste wird innerhalb von generiert $ schüsse
Schleife.
öffentliche Funktion getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = new DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ images); if ($ shots) $ html [] = '
'. $ shot-> title. '
'; // kombiniere Shot-URL, Titel und Miniaturansicht, um sie zur ul-Liste hinzuzufügen $ html [] = 'Es ist immer eine gute Idee, jedem Element Ihres Plugins Klassen hinzuzufügen. Dies gibt fortgeschrittenen Benutzern Ihres Plugins die Möglichkeit, es anzupassen. Vermeiden Sie die Verwendung von Inline-CSS für Inhalte, die über Ihr Plugin generiert werden.
Shortcodes ermöglichen, wie der Name schon sagt, den Benutzern das einfache Hinzufügen komplexer Inhalte zu Blogbeiträgen.
Wir haben schon die add_shortcode
Haken Sie in unserem Plugin-Klassenkonstruktor ein. Jetzt schreiben wir den Shortcode Methode
in unserem Klasse
, Dadurch werden die Shortcode-Attribute ausgelesen und die Dribbble-Bilder mithilfe von getImages ()
Methode.
Wir rufen unseren Shortcode an [Dribbble]
. Wie bereits erwähnt, wird der Name des Shortcodes durch den ersten Parameter in der bestimmt add_shortcode
Funktion. Es wird mit den Attributen verwendet, die für das benötigt werden getImages ()
Methode. Zum Beispiel: [Dribbble-Benutzer = haris images = 5 width = 100 height = 100 caption = true]
.
public function shortcode ($ atts) // extrahiere die Attribute in die Variablen extract (shortcode_atts (array ('images' => 3, 'width' => 50, 'height' => 50, 'caption' => true, , $ atts)); // Übergabe der Attribute an die Funktion getImages und Rendern der Bilder return $ this-> getImages ($ atts ['user'], $ images, $ width, $ height, $ caption);
Standardmäßig unterstützen WordPress-Widgets keine Kurzcodes, verwenden jedoch die widget_text
Filter, können wir Shortcode-Unterstützung in WordPress-Widgets erzwingen.
Wir können den Filter in unseren einfügen WPDribbble
Objektkonstruktor.
public function __construct () // Plugin-Pfad setzen $ this-> pluginPath = dirname (__ FILE__); // Setze die URL des Plugins $ this-> pluginUrl = WP_PLUGIN_URL. '/ wp-Dribbble'; add_shortcode ('Dribbble', Array ($ this, 'shortcode')); // Shortcode-Unterstützung für Widgets hinzufügen add_filter ('widget_text', 'do_shortcode');
Das Vorlagen-Tag kann direkt in WordPress-Designs verwendet werden. Der grundlegende Zweck des Template-Tags besteht darin, eine neue Instanz von unserem zu erstellen WPDribbble
Klasse und rufen Sie an getImages ()
Methode. Das Template-Tag ist eine einfache PHP-Funktion und muss außerhalb des Plugins registriert werden Klasse
. Es muss einen eindeutigen Namen haben. Andernfalls kollidiert es mit Funktionen / Plugins mit ähnlichem Namen. Da heißt unser Plugin WP-Dribbble
, Wir nennen das Template-Tag, wp_Dribbble ()
.
Funktion wp_Dribbble ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) $ wpDribbble = new WPDribbble; echo $ wpDribbble-> getImages ($ user, $ images, $ width, $ height, $ caption);
Herzliche Glückwünsche! Sie haben erfolgreich ein WordPress-Plugin mit OOP geschrieben. Wenn Sie Fragen haben, lassen Sie es mich wissen, und ich werde mein Bestes tun, um Ihnen zu helfen?