Creați pluginuri WordPress cu tehnici OOP

Codul orientat pe obiecte, printre altele, poate ajuta la organizarea și adăugarea reutilizabilității codului. În acest tutorial, vă voi învăța elementele de bază ale scrierii unui plugin WordPress folosind tehnici orientate pe obiecte. Vom folosi API-ul lui Dribbble ca exemplu pentru acest tutorial. Gata?


Ce vom învăța:

  • Beneficiile utilizării OOP pentru pluginurile WordPress.
  • Cum se configurează un scurtcod.
  • Cum se configurează o etichetă șablon.
  • Cum să activați codurile scurte în widgeturile WordPress.
  • Real-world exemplu prin utilizarea API-ului Dribbble.

De ce utilizați OOP?

Înainte de a avansa cu acest tutorial, ar trebui să aveți cel puțin o înțelegere elementară despre scrierea unui plugin WordPress. Jonathan a scris un tutorial uimitor pe tema "Cum se scrie un plugin WordPress". Dă-i o citire.

Crearea pluginurilor WordPress cu cod orientat obiect este destul de eficientă și ordonată, în comparație cu utilizarea codului procedural. Este mai ușor să gestionați baza de cod și să o extindeți folosind tehnici de moștenire, care pot fi deosebit de utile atunci când scrieți un plugin mare.


Dribbble

Pentru a scrie un plugin WordPress, avem mai întâi nevoie de un sentiment de direcție. Vom scrie un plugin care va afișa cele mai noi fotografii de la Dribbble, folosind API-ul REST. Apoi vom adăuga suport pentru coduri scurte pentru postări și widget-uri și etichetă șablon pentru teme.


Pasul 1 - Configurarea clasei Plugin

Codul orientat pe obiecte se bazează pe clase și metode (funcții). Să creați clasa noastră de bază, care va interacționa cu cârligele și filtrele WordPress.

 clasa WPDribbble funcția publică __construct ()  $ wpDribbble = nou WPDribbble ();

Clasele PHP au o funcție de constructor, __construi, care se execută de îndată ce o instanță nouă a unei clase este instanțiată. Toate cârligele și filtrele WordPress vor fi înregistrate sub constructorul clasei noastre de pluginuri. Permiteți avansarea și înregistrați un shortcode pentru pluginul nostru. add_shortcode () funcția / cârlig va merge sub funcția constructor.

Noul exemplu al unei clase / obiect este înregistrat utilizând nou cuvinte cheie. Consultați ultimul rând din codul de mai jos.

 clasa WPDribbble funcția publică __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode'));  funcția publică shortcode ()  $ wpDribbble = nou WPDribbble ();
  • add_shortcode - Primul parametru este eticheta de cod scurt, iar al doilea este funcția de apel invers.

Observați cum folosim un mulțime în parametrul funcției de apel invers? Pentru a înregistra funcțiile callback din interiorul unui obiect, trebuie să folosim un mulțime.

Primul element al matricei se referă la obiect, prin $ this. Cel de-al doilea element din mulțime este numele metodei din cadrul clasei. Toate cârligele și filtrele trebuie să fie menționate astfel în interiorul unei clase.

Încă confuz?

 # 1. Utilizarea standard add_shortcode ('shortcode_name', 'shortcode_func'); function shortcode_func () // Continutul acestei functii se va executa atunci cand bloggerul // foloseste shortcode-ul [shortcode_name].  # 2. Cu PHP 5.3, putem trece o funcție anonimă. add_shortcode ('shortcode_name', function () // Conținutul acestei funcții se va executa atunci când bloggerul // folosește shortcode [shortcode_name].)); # 3. În cadrul unei clase de clasă WPDribbble funcția publică __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode'));  funcția publică shortcode () // Conținutul acestei funcții se va executa atunci când bloggerul // folosește shortcode [shortcode_name]. 

Pasul 2 - Clasa API Dribbble

Deoarece în prezent nu avem nevoie de funcții de API fanteziste, vom crea un pachet API destul de simplu pentru Dribbble. Există deja o bibliotecă disponibilă pentru Dribbble, dar, de dragul acestui tutorial, vom scrie propriile noastre. Vă va ajuta să înțelegeți conceptele din spatele acestui tutorial.

Vom scrie un DribbbleAPI obiect, și să înregistreze a metodă denumit getPlayerShots () pentru a interacționa cu API-ul lui Dribbble și pentru a-l returna mulțime din ultimele fotografii.

Să creăm un nou fișier pentru această clasă, numit DribbbleAPI.php

 clasa DribbbleAPI // url la Dribbble api protejat $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username sau user id protejat $ user; 

Mai sus, setăm două variabile de clasă.

  • $ apiUrl - Legătura cu API-ul Dribbble, unde vor fi trimise apelurile.
  • utilizator $ - Numele de utilizator sau id-ul unui utilizator Dribbble. Această valoare va fi setată din interiorul constructorului (__construi).
 clasa DribbbleAPI // url la Dribbble api protejat $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username sau user id protejat $ user; funcția publică __construct ($ user) $ this-> user = $ user; 

Constructorul este trecut a utilizator $ variabila, care este apoi trecută de către constructor la proprietatea clasei, numită utilizator.

Prefixăm proprietatea sau numele variabilei cu public pentru a specifica faptul că valoarea acestei proprietăți poate fi extrasă din afara clasă. Dacă, în schimb, dorim să limităm accesul la proprietate doar la acest lucru clasă, și poate oricare clasăcare mostenesc de la ea, vom folosi protejat prefix. Această practică este denumită încapsulare.

Avem baza pregătită pentru pachetul nostru Dribbble API. Acum, vom scrie un nou metodă, denumit getPlayerShots (). Scopul acestui lucru metodă va fi să interogați API-ul și să convertiți rezultatul într-un mulțime pentru utilizarea în plugin-ul nostru.

 clasa DribbbleAPI // url la Dribbble api protejat $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username sau user id protejat $ user; funcția publică __construct ($ user) $ this-> user = $ user;  funcția publică getPlayerShots ($ perPage = 15) $ user = $ this-> utilizator; $ json = wp_remote_get ($ this-> apiUrl. 'jucători /'. $ user. '/ shots? per_page ='. $ perPage); $ array = json_decode ($ json ['body']); $ shots = $ array-> fotografii; returneaza fotografii de $; 

Aflați mai multe despre wp_remote_get.

getPlayerShots funcția retrimite utilizatorul din variabila de clasă. Foloseste WordPress " wp_remote_get pentru a interoga API-ul Dribbble. API apoi răspunde la interogarea noastră cu un șir JSON, care este apoi analizat într-un mulțime și trimis înapoi la funcția folosind întoarcere cuvinte cheie.

Acesta este tot ceea ce avem nevoie de API în acest moment - pur și simplu mulțime de fotografii. Dacă, în viitor, ne cere mai multă funcționalitate, putem adăuga mai multe metodăs la curent clasă, sau creați un nou clasă care extinde aceasta. Din nou, aceasta se numește moștenire.


Pasul 3 - Integrarea DribbbleAPI Clasă

Aceasta este partea distractivă; proaspăt coapte DribbbleAPI clasă va intra în uz. Vom încerca să tragem prin fotografiile preluate de la API și să generăm un html lista de fotografii, care va fi transmisă codului scurt și etichetei șablonului. În timpul buclă, imaginile Dribbble de dimensiune completă vor fi memorate în cache și salvate în dosarul plugin-ului, iar miniaturile vor fi generate utilizând TimThumb.

Pentru a determina dacă imaginile complete sunt deja stocate local, calea pluginului este necesară. De asemenea, pentru a genera miniaturile cu timthumb, plugin url este necesară. În acest scop, vom crea două variabile de clasă numite pluginPath și pluginUrl în a noastră WPDribbble clasa, și apoi setați valorile lor din interiorul constructorului metodă.

Setarea PluginPath și PluginUrl

 clasă WPDribbble protejat $ pluginPath; protejat $ pluginUrl; funcția publică __construct () // Setați Calea Pluginului $ this-> pluginPath = Dirname (__FILE__); // Setați URL-ul pluginului $ this-> pluginUrl = WP_PLUGIN_URL. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode')); 

getImages () Metodă

Creaza un nou metodă în cadrul WPDribbble clasă, denumit getImages.

În interiorul a clasă, puteți utiliza nume generice pentru funcții. Nu vor intra în conflict cu alte pluginuri sau cu funcțiile încorporate ale WordPress, deoarece acestea se află sub limitele clasă Spațiu de nume.

 funcția publică getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) 
  • utilizator $ - Numele de utilizator sau ID-ul utilizatorului Dribbble. utilizator $ va fi folosit la înregistrarea unei noi instanțe a DribbbleAPI clasă.
  • $ imagini - Numărul de imagini de renderat. $ imagini va fi folosit atunci când interogați API prin getPlayerShots metodă.
  • $ lățime și $ înălțime - Timthumb va fi folosit pentru a genera miniaturi.
  • $ legendă - Opțiunea de a face titlul unei imagini.

Apoi, vom include DribbbleAPI clasa în getImages () și creați o nouă instanță a acesteia pentru a apuca imaginile.

 funcția publică getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = noul DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ imagini); dacă ($ shot) 

$ fotografii variabila în cod este populate cu un mulțime din cele trei recente Dribbbles de la utilizator $.

Așa cum am menționat mai sus, vom trece prin $ fotografii mulțime, și salvați imaginile de dimensiune completă local pentru scopuri de cache. Imaginile din cache vor fi utilizate cu TimThumb pentru a servi miniaturile. Pentru stocarea imaginilor complete și miniaturilor generate de TimThumb, creați două dosare. Vom folosi full-images / pentru stocarea imaginilor de dimensiune completă și cache / pentru miniaturi, deoarece acesta este numele directorului implicit pentru TimThumb.

HTML pentru lista va fi generat în cadrul $ fotografii buclă.

 funcția publică getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = noul DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ imagini); dacă ($ shots) $ html [] = '
    „; foreach ($ fotografii ca $ shot) $ image = $ shot-> image_url; // url a imaginii $ fileName = $ shot-> id. '.Png'; // generarea unui nume de fișier image_id.png dacă (! file_exists ($ this-> pluginPath. '/ full-images /'. $ fileName)) // verificați dacă imaginea completă există $ rawImage = wp_remote_get ($ image); // obține imaginea completă $ newImagePath = $ this-> pluginPath. '/ imagini complete /'. $ FileName; $ fp = fopen ($ newImagePath, 'x'); fwrite ($ fp, $ rawImage ['body']); / / salvați imaginea completă fclose ($ fp); // generați adresa URL miniatură $ localImage = $ this-> pluginUrl. '/timthumb.php?src='. strstr ($ this-> pluginPath, 'wp-content'). '/ imagini complete /'. $ fileName. '& w ='. $ lățime. '& h ='. $ înălțime. '& Q = 100'; dacă ($ caption) // dacă caption este adevărat $ captionHTML = '

    ". $ shot-> titlu. '

    „; // combina url-ul shot, titlul și miniatură pentru a adăuga la lista de ulturi $ html [] = '
  • url. "" title = "". $ shot-> titlu. „">' . $shot->titlu . „; $ html [] = '
„; returnați implode ("\ n", $ html);

Adăugarea de clase

Este întotdeauna o idee bună să adăugați clase la fiecare element al pluginului. Aceasta oferă utilizatorilor avansați ai pluginului dvs. libertatea de a-l personaliza. Evitați utilizarea CSS inline pentru conținutul generat prin pluginul dvs..


Pasul 4 - Configurarea codului scurt

Codurile scurte, așa cum sugerează și numele, permit utilizatorilor să adauge cu ușurință conținut complex în postările pe blog.

Avem deja add_shortcode cârlig gata în constructorul nostru de clasă plugin. Acum, vom scrie codul scurt metodă în interiorul nostru clasă, care va excreta atributele codului scurt și va returna imaginile Dribbble folosind getImages () metodă.

O să sunăm codul nostru scurt [Dribbble]. Așa cum am menționat anterior, numele codului scurt este determinat de primul parametru din add_shortcode funcţie. Acesta va fi folosit cu atributele necesare pentru getImages () metodă. De exemplu: [Dribbble user = haris imagini = 5 lățime = 100 înălțime = 100 caption = true].

 funcția publică shortcode ($ atts) // extrage atributele în extrasele variabilelor (shortcode_atts (array ('images' => 3, 'width' => 50, 'height' => 50, 'caption' => true) , $ atts)); // treci atributele pentru a obține funcția getImages și a face ca imaginile să returneze $ this-> getImages ($ atts ['user'], $ images, $ width, $ height, $ caption); 

Adăugați suport Shortcode pentru widgeturile WordPress

În mod prestabilit, widgeturile WordPress nu acceptă coduri scurte, cu toate acestea, utilizând widget_text filtru, putem forța suportul de coduri scurte în widget-urile WordPress.

Putem adăuga filtrul în lista noastră WPDribbble constructor de obiecte.

 funcția publică __construct () // Setați Calea Pluginului $ this-> pluginPath = Dirname (__FILE__); // Setați URL-ul pluginului $ this-> pluginUrl = WP_PLUGIN_URL. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode')); // Adăugați suport pentru coduri scurte pentru widget-uri add_filter ('widget_text', 'do_shortcode'); 

Pasul 5 Setarea etichetei de șablon

Eticheta șablonului poate fi utilizată direct în teme WordPress. Scopul de bază al etichetei de șablon va fi să creeze o nouă instanță a noastră WPDribbble clasa, și apelarea getImages () metodă. Eticheta șablonului va fi o simplă funcție PHP și trebuie înregistrată în afara pluginului clasă. Trebuie să aibă un nume unic; în caz contrar, va intra în conflict cu funcții / pluginuri cu nume asemănător. Deoarece plugin-ul nostru este chemat WP-Dribbble, vom apela eticheta șablonului, wp_Dribbble ().

 funcția wp_Dribbble ($ user, $ images = 3, $ width = 50, $ înălțime = 50, $ caption = true) $ wpDribbble = new WPDribbble; echo $ wpDribbble-> getImages ($ utilizator, $ imagini, $ lățime, $ înălțime, $ caption); 

Voila!

Felicitări! Ați scris cu succes un plugin WordPress cu OOP. Dacă aveți întrebări, spuneți-mi, și voi face tot posibilul pentru a vă ajuta?

Cod