Crea plugin WordPress con tecniche OOP

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?


Cosa stiamo andando ad imparare:

  • Vantaggi dell'uso di OOP per i plugin WordPress.
  • Come impostare uno shortcode.
  • Come impostare un tag modello.
  • Come abilitare lo shortcode nei widget di WordPress.
  • Esempio del mondo reale usando l'API di Dribbble.

Perché usare OOP?

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.


Dribbble

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.


Passaggio 1: impostazione della classe del plug-in

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 ();
  • add_shortcode - Il primo parametro è il tag shortcode e il secondo è la funzione callback.

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 un schieramento.

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.

Ancora confuso?

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

Passaggio 2: Classi API Dribbble

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.

  • $ apiUrl - Il link all'API Dribbble, dove verranno inviate le chiamate.
  • $ user - Il nome utente o l'ID utente di un utente Dribbble. Questo valore verrà impostato dal costruttore (__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 classeche 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 metodos alla corrente classe, o creare un nuovo classe questo estende questo. Ancora una volta, questo è indicato come ereditarietà.


Passaggio 3: integrazione di DribbbleAPI Classe

Questa è 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.

Impostazione PluginPath e PluginUrl

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

Crea 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 il classe namespace.

 funzione pubblica getImages ($ utente, $ immagini = 3, $ larghezza = 50, $ altezza = 50, $ caption = true) 
  • $ user - Nome utente o ID utente di Dribbble. $ user sarà usato quando si registra una nuova istanza di DribbbleAPI classe.
  • $ immagini - Numero di immagini da rappresentare. $ immagini verrà utilizzato durante la query dell'API attraverso il getPlayerShots metodo.
  • $ larghezza e $ altezza - Timthumb verrà utilizzato per generare miniature.
  • $ caption - Opzione per il rendering del titolo di un'immagine.

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 [] = '
    '; foreach ($ colpi come $ shot) $ image = $ shot-> image_url; // url dell'immagine $ fileName = $ shot-> id. '.Png'; // generando un nomefile image_id.png if (! file_exists ($ this-> pluginPath. '/ full-images /'. $ fileName)) // controlla se esiste l'immagine completa $ rawImage = wp_remote_get ($ image); // ottiene l'immagine completa $ newImagePath = $ this-> pluginPath. '/ full-images /'. $ Filename; $ fp = fopen ($ newImagePath, 'x'); fwrite ($ fp, $ rawImage ['body']); // salva l'immagine completa fclose ($ fp); // genera l'url della miniatura $ localImage = $ this-> pluginUrl. '/timthumb.php?src='. strstr ($ this-> pluginPath, 'wp-content'). '/ full-images /'. $ fileName. '& w ='. $ larghezza. '& h ='. $ altezza. '& Q = 100'; if ($ caption) // se la didascalia è vera $ captionHTML = '

    '. $ shot-> titolo. '

    '; // combina url shot, titolo e miniatura da aggiungere alla lista ul $ html [] = '
  • url '"title ="'. $ shot-> titolo. '">' . $shot->titolo. ''.$captionHTML.'
  • '; $ html [] = '
'; return implode ("\ n", $ html);

Aggiunta di classi

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


Passaggio 4: impostazione dello Shortcode

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

Aggiungi il supporto Shortcode per i widget di WordPress

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

Passaggio 5 Impostazione del tag modello

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

Ecco!

Congratulazioni! Hai scritto con successo un plugin WordPress con OOP. Se hai qualche domanda, fammelo sapere, e farò del mio meglio per aiutarti?