Il codice orientato agli oggetti, tra le altre cose, può aiutare a organizzare e aggiungere la riusabilità al codice. In questo tutorial, ti insegnerò le basi della scrittura di un plugin per WordPress usando tecniche orientate agli oggetti. Utilizzeremo l'API di Dribbble come esempio per questo tutorial. Pronto?
Prima di andare avanti con questo tutorial, dovresti avere almeno una comprensione elementare della scrittura di un plugin per WordPress. Jonathan ha scritto un fantastico tutorial su "Come scrivere un plugin WordPress". Dagli una lettura.
Creare plugin per WordPress con codice orientato agli oggetti è abbastanza efficiente e ordinato, se confrontato con l'uso di codice procedurale. È più semplice gestire la base di codice ed espanderla utilizzando tecniche di ereditarietà, che possono essere particolarmente utili quando si scrive un plug-in di grandi dimensioni.
Per scrivere un plugin per WordPress, abbiamo prima bisogno di un senso dell'orientamento. Scriveremo un plug-in che mostrerà gli ultimi scatti di Dribbble, usando la loro API REST. Aggiungiamo quindi il supporto per gli shortcode per post e widget e tag modello per temi.
Il codice orientato agli oggetti si basa su classi e metodi (funzioni). Creiamo la nostra classe principale, che interagirà con gli hook e i filtri di WordPress.
class WPDribbble public function __construct () $ wpDribbble = new WPDribbble ();
Le classi PHP hanno una funzione di costruzione, __costruire
, che viene eseguito non appena viene istanziata una nuova istanza di una classe. Tutti gli hook e i filtri di WordPress saranno registrati sotto il costruttore della nostra classe di plugin. Consente di andare avanti e registrare uno shortcode per il nostro plugin. Il add_shortcode ()
la funzione / hook andrà sotto la funzione di costruzione.
La nuova istanza di una classe / oggetto è registrata usando il nuovo
parola chiave. Fare riferimento all'ultima riga nel codice qui sotto.
class WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); public function shortcode () $ wpDribbble = new WPDribbble ();
Nota come stiamo usando un
schieramento
nel parametro della funzione di callback? Per registrare le funzioni di callback all'interno di un oggetto, dobbiamo usare unschieramento
.
Il primo elemento dell'array fa riferimento all'oggetto, via $ questo
. Il secondo oggetto nel schieramento
è il nome del metodo all'interno della classe. Tutti i ganci e i filtri devono essere referenziati in questo modo all'interno di una classe.
1. Uso standard add_shortcode ('shortcode_name', 'shortcode_func'); function shortcode_func () // I contenuti di questa funzione verranno eseguiti quando il blogger // utilizza lo shortcode [shortcode_name]. # 2. Con PHP 5.3, possiamo passare una funzione anonima. add_shortcode ('shortcode_name', function () // I contenuti di questa funzione verranno eseguiti quando il blogger // utilizza lo shortcode [shortcode_name].); # 3. All'interno di una classe class WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); public function shortcode () // I contenuti di questa funzione verranno eseguiti quando il blogger // utilizza lo shortcode [shortcode_name].
Poiché al momento non abbiamo bisogno di funzioni API sofisticate, creeremo un semplice wrapper API per Dribbble. C'è già una libreria disponibile per Dribbble, ma, per il bene di questo tutorial, scriveremo la nostra. Ti aiuterà a capire i concetti alla base di questo tutorial.
Scriveremo un DribbbleAPI oggetto
, e registrati a metodo
chiamato getPlayerShots ()
interagire con l'API di Dribbble e restituire un schieramento
degli ultimi scatti.
Creiamo un nuovo file per questa classe, chiamato DribbbleAPI.php
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username o user id protected $ user;
In alto, stiamo impostando due variabili di classe.
__costruire
) metodo.class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username o user id protected $ user; funzione pubblica __construct ($ user) $ this-> user = $ user;
Il costruttore è passato a $ user
variabile, che viene quindi passata dal costruttore alla proprietà della classe, chiamata utente
.
Prefixiamo la proprietà, o il nome della variabile con pubblico
per specificare che il valore di questa proprietà può essere recuperato dall'esterno del classe
. Se invece desideriamo limitare l'accesso alla proprietà solo a questo classe
, e forse nessuno classe
che ne ereditiamo, useremmo il protetta
prefisso. Questa pratica è indicata come incapsulamento.
Abbiamo la base pronta per il nostro wrapper API Dribbble. Ora, scriveremo un nuovo metodo
, chiamato getPlayerShots ()
. Lo scopo di questo metodo
sarà per interrogare l'API e convertire il risultato in un schieramento
per l'utilizzo all'interno del nostro plugin.
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble username o user id protected $ user; funzione pubblica __construct ($ user) $ this-> user = $ user; public function getPlayerShots ($ perPage = 15) $ user = $ this-> user; $ json = wp_remote_get ($ this-> apiUrl. 'players /'. $ user. '/ shots? per_page ='. $ perPage); $ array = json_decode ($ json ['body']); colpi $ = $ array-> colpi; restituire $ scatti;
Ulteriori informazioni su wp_remote_get.
Il getPlayerShots
funzione recupera l'utente dalla variabile di classe. Usa WordPress ' wp_remote_get
funzione per interrogare l'API di Dribbble. L'API risponde quindi alla nostra query con una stringa JSON, che viene quindi analizzata in un file schieramento
e rinviato alla funzione usando il ritorno
parola chiave.
Questo è tutto ciò che richiediamo dall'API al momento: semplicemente un schieramento
di colpi del giocatore. Se dovessimo richiedere più funzionalità in futuro, potremmo aggiungere altro metodo
s alla corrente classe
, o creare un nuovo classe
questo estende questo. Ancora una volta, questo è indicato come ereditarietà.
DribbbleAPI
ClasseQuesta è la parte divertente; il appena sfornato DribbbleAPI
classe
entrerà in uso. Inseriremo in loop gli scatti recuperati dall'API e genereremo un html
lista di colpi, che sarà trasmessa allo shortcode e al tag del template. Durante il ciclo, le immagini Dribbble a grandezza naturale verranno memorizzate nella cache e salvate nella cartella del plug-in e le miniature verranno generate utilizzando TimThumb.
Per determinare se le immagini complete sono già memorizzate localmente, il percorso del plugin
è obbligatorio. Inoltre, per generare le miniature con timthumb
, il URL del plugin
è obbligatorio. Per questo scopo, creeremo due variabili di classe chiamate pluginPath
e pluginURL
nel nostro WPDribbble
classe e quindi impostare i loro valori all'interno del costruttore metodo
.
class WPDribbble protected $ pluginPath; protetto $ pluginUrl; funzione pubblica __construct () // Imposta percorso plugin $ this-> pluginPath = dirname (__ FILE__); // Imposta l'URL del plugin $ this-> pluginUrl = WP_PLUGIN_URL. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode'));
getImages ()
MetodoCrea un nuovo metodo
all'interno del WPDribbble
classe
, chiamato getImages.
Dentro a
classe
, puoi usare nomi generici per funzioni. Non entreranno in conflitto con altri plugin o funzioni incorporate di WordPress, perché sono sotto ilclasse
namespace.
funzione pubblica getImages ($ utente, $ immagini = 3, $ larghezza = 50, $ altezza = 50, $ caption = true)
$ user
sarà usato quando si registra una nuova istanza di DribbbleAPI
classe.$ immagini
verrà utilizzato durante la query dell'API attraverso il getPlayerShots
metodo.Successivamente, includeremo il DribbbleAPI
classe nel getImages ()
funzione, e creare una nuova istanza di esso per afferrare le immagini.
funzione pubblica getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = new DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ images); se ($ colpi)
Il $ colpi
variabile nel codice è popolata con un schieramento
di tre recenti Dribbbles dal $ user
.
Come accennato in precedenza, andremo a scorrere il $ colpi
schieramento
, e salvare localmente le immagini a dimensione intera per scopi di memorizzazione nella cache. Le immagini memorizzate nella cache verranno utilizzate con TimThumb per servire le miniature. Per la memorizzazione di immagini e miniature generate da TimThumb, creare due cartelle. Useremo pieno-images /
per memorizzare le immagini a dimensione intera, e cache /
per le miniature, poiché questo è il nome della cartella predefinita per TimThumb.
Il codice HTML per la lista verrà generato all'interno di $ colpi
ciclo continuo.
funzione pubblica 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-> titolo. '
'; // combina url shot, titolo e miniatura da aggiungere alla lista ul $ html [] = 'È sempre una buona idea aggiungere classi a ciascun elemento del tuo plug-in. Questo fornisce agli utenti avanzati del tuo plugin la libertà di personalizzarlo. Evita l'uso di CSS in linea per il contenuto generato tramite il tuo plug-in.
Shortcode, come suggerisce il nome, consente agli utenti di aggiungere facilmente contenuti complessi nei post del blog.
Abbiamo già il add_shortcode
pronto per l'hook nel nostro costruttore di classi plugin. Ora, scriveremo lo shortcode metodo
dentro il nostro classe
, che espellerà gli attributi shortcode e restituirà le immagini Dribbble usando il getImages ()
metodo.
Chiameremo il nostro shortcode [Dribbble]
. Come accennato in precedenza, il nome dello shortcode è determinato dal primo parametro nel file add_shortcode
funzione. Sarà usato con gli attributi richiesti per il getImages ()
metodo. Per esempio: [Utente Dribbble = immagini haris = 5 larghezza = 100 altezza = 100 caption = true]
.
shortcode funzione pubblica ($ atts) // estrae gli attributi in variabili extract (shortcode_atts (array ('images' => 3, 'width' => 50, 'height' => 50, 'caption' => true,) $ atts)); // passa gli attributi alla funzione getImages e restituisce le immagini $ this-> getImages ($ atts ['user'], $ images, $ width, $ height, $ caption);
Per impostazione predefinita, i widget di WordPress non supportano gli shortcode, tuttavia, usando il widget_text
filtro, possiamo forzare il supporto shortcode nei widget di WordPress.
Possiamo aggiungere il filtro nel nostro WPDribbble
costruttore di oggetti.
funzione pubblica __construct () // Imposta percorso plugin $ this-> pluginPath = dirname (__ FILE__); // Imposta l'URL del plugin $ this-> pluginUrl = WP_PLUGIN_URL. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode')); // Aggiungi il supporto shortcode per i widget add_filter ('widget_text', 'do_shortcode');
Il tag modello può essere utilizzato direttamente nei temi WordPress. Lo scopo di base del tag template sarà quello di creare una nuova istanza del nostro WPDribbble
classe, e chiama il getImages ()
metodo. Il tag template sarà una semplice funzione PHP e deve essere registrato all'esterno del plugin classe
. Deve avere un nome univoco; in caso contrario, entrerà in conflitto con funzioni / plug-in con nome simile. Dal momento che il nostro plugin è chiamato WP-Dribbble
, chiameremo il tag del modello, wp_Dribbble ()
.
function wp_Dribbble ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) $ wpDribbble = new WPDribbble; echo $ wpDribbble-> getImages ($ user, $ images, $ width, $ height, $ caption);
Congratulazioni! Hai scritto con successo un plugin WordPress con OOP. Se hai qualche domanda, fammelo sapere, e farò del mio meglio per aiutarti?