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?
Î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.
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.
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 ();
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 unmulț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.
# 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].
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ă.
__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.
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ă
.
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 limiteleclasă
Spațiu de nume.
funcția publică getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true)
utilizator $
va fi folosit la înregistrarea unei noi instanțe a DribbbleAPI
clasă.$ imagini
va fi folosit atunci când interogați API prin getPlayerShots
metodă.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 [] = '
". $ shot-> titlu. '
„; // combina url-ul shot, titlul și miniatură pentru a adăuga la lista de ulturi $ html [] = '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..
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);
Î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');
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);
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?