Erstellen Sie WordPress-Plugins mit OOP-Techniken

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?


Was wir lernen werden:

  • Vorteile der Verwendung von OOP für WordPress-Plugins.
  • So richten Sie einen Shortcode ein.
  • So richten Sie ein Template-Tag ein.
  • So aktivieren Sie Shortcode in WordPress-Widgets.
  • Praxisbeispiel mit der API von Dribbble.

Warum OOP verwenden??

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.


Dribbble

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.


Schritt 1 - Einrichten der Plugin-Klasse

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 ();
  • add_shortcode - Der erste Parameter ist das Shortcode-Tag und der zweite ist die Rückruffunktion.

Beachten Sie, wie wir eine verwenden Array im Callback-Funktionsparameter? Um Callback-Funktionen in einem Objekt zu registrieren, müssen wir ein Array.

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.

Immer noch verwirrt?

 # 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. 

Schritt 2 - Dribbble-API-Klasse

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.

  • $ apiUrl - Der Link zur Dribbble-API, an die die Anrufe gesendet werden.
  • $ Benutzer - Der Benutzername oder die Benutzer-ID eines Dribbble-Benutzers. Dieser Wert wird innerhalb des Konstruktors festgelegt (__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 KlasseWenn 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 Methodes zum Strom Klasse, oder ein neues erstellen Klasse das reicht dieses aus. Dies wird wiederum als Vererbung bezeichnet.


Schritt 3 - Integrieren der DribbbleAPI Klasse

Das 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.

PluginPath und PluginUrl einstellen

 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 () Methode

Erstelle 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 der Klasse Namespace.

 öffentliche Funktion getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) 
  • $ Benutzer - Benutzername oder Benutzer-ID von Dribbble. $ Benutzer wird verwendet, wenn eine neue Instanz von registriert wird DribbbleAPI Klasse.
  • $ Bilder - Anzahl der zu rendernden Bilder. $ Bilder wird verwendet, wenn die API über das API abgefragt wird getPlayerShots Methode.
  • $ width und $ height - Timthumb wird zum Erzeugen von Miniaturansichten verwendet.
  • $ caption - Option zum Rendern des Titels eines Bildes.

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 [] = '
    '; foreach ($ shots als $ shot) $ image = $ shot-> image_url; // URL des Bildes $ fileName = $ shot-> id. '.png'; // Generieren eines Dateinamens image_id.png if (! file_exists ($ this-> pluginPath. '/ full-images /'. $ fileName)) // prüft, ob das vollständige Bild vorhanden ist $ rawImage = wp_remote_get ($ image); // Holen Sie sich das vollständige Image $ newImagePath = $ this-> pluginPath. '/ Vollbilder /'. $ fileName; $ fp = fopen ($ newImagePath, 'x'); fwrite ($ fp, $ rawImage ['body']); // das vollständige Bild speichern fclose ($ fp); // Thumbnail-URL $ localImage = $ this-> pluginUrl erzeugen. "/timthumb.php?src=". strstr ($ this-> pluginPath, 'wp-content'). '/ Vollbilder /'. $ Dateiname '& w ='. $ width '& h ='. $ Höhe '& q = 100'; if ($ caption) // wenn caption wahr ist $ captionHTML = '

    '. $ shot-> title. '

    '; // kombiniere Shot-URL, Titel und Miniaturansicht, um sie zur ul-Liste hinzuzufügen $ html [] = '
  • url. "" title = "". $ shot-> title. '">' . $shot->Titel . ".$captionHTML."
  • '; $ html [] = '
'; return implode ("\ n", $ html);

Klassen hinzufügen

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.


Schritt 4 - Einrichten des Shortcodes

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); 

Shortcode-Unterstützung für WordPress-Widgets hinzufügen

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'); 

Schritt 5 Einrichten des Template-Tags

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); 

Voila!

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?