I namespace e l'autoloading non sono argomenti di solito discussi quando si tratta di lavorare con i plugin di WordPress.
Parte di questo ha a che fare con la comunità che lo circonda, alcune delle quali hanno a che fare con le versioni di PHP supportate da WordPress, e alcune hanno semplicemente a che fare con il fatto che non molte persone ne parlano.
E va bene, in una certa misura.
Né i namespace né l'autoloading sono argomenti che è assolutamente necessario utilizzare per creare plug-in. Possono, tuttavia, fornire un modo migliore per organizzare e strutturare il codice e ridurre il numero di richiedere
, require_once
, includere
, o include_once
affermazioni che usano i tuoi plugin.
In questa serie, daremo un'occhiata esattamente a quali sono gli spazi dei nomi PHP, perché sono utili e come usarli. Quindi daremo un'occhiata a come utilizzare i caricatori automatici per caricare automaticamente i file di cui abbiamo bisogno senza doverli caricare manualmente nel nostro codice.
Per iniziare, avrai bisogno dei seguenti strumenti:
Una volta che tutto è a posto, iniziamo a creare un plug-in. Nota che se una delle precedenti sembra nuova per te, allora non esitare a rivedere tutti i miei tutorial precedenti sulla mia pagina del profilo.
Inoltre, puoi seguirmi sul mio blog e / o Twitter su @tommcfarlin dove parlo di sviluppo di software nel contesto di WordPress.
Detto ciò, iniziamo.
In questa serie, stiamo costruendo un semplice plug-in principalmente per dimostrare come gli spazi dei nomi e il caricamento automatico funzionano in PHP. Ma per farlo, aiuta sempre ad applicare i concetti in modo pratico.
A tal fine, costruiremo un plug-in che semplifica il caricamento di fogli di stile e stili JavaScript nel nostro plug-in e visualizza una meta-box che richiede all'utente una domanda per aiutarli a fare brainstorming su quale blog.
No, non è qualcosa che probabilmente invierai al repository dei plugin di WordPress, e non è qualcosa che probabilmente userai al di fuori di questa particolare demo. Ma ricorda, lo scopo di questa serie è dimostrare come funzionano gli spazi dei nomi e l'autoloading.
Ed è attraverso questo esempio che faremo proprio questo.
Se hai seguito uno dei miei tutorial precedenti, sai che una delle cose che mi piace fare è pianificare cosa costruiremo prima di scrivere qualsiasi codice. Quindi per la prima iterazione di questo plugin, questo è ciò che sappiamo che avremo bisogno di fare:
Sembra semplice, vero? Se no, non preoccuparti. Ti guiderò attraverso l'intero processo completo di codice, commenti, schermate e spiegazioni.
Iniziamo.
Fin dall'inizio, sappiamo che avremo bisogno di un file che funge da bootstrap per il plugin. Sappiamo anche che avremo bisogno di una directory per la funzionalità amministrativa.
Andiamo avanti e crearlo ora:
Ovviamente, abbiamo un singolo file vuoto e una directory di amministrazione. Andiamo avanti e configuriamo questo plugin in modo che si presenti nel contesto della schermata di attivazione del plugin WordPress.
Per fare ciò, dobbiamo aggiungere il seguente blocco di codice all'inizio del file del plugin:
Quindi, quando si passa alla pagina del plug-in di WordPress nell'area di amministrazione, si dovrebbe vederlo visualizzato nell'elenco dei plug-in. Se si sceglie di attivarlo, non accadrà nulla poiché non abbiamo scritto alcun codice.
A questo punto, possiamo andare avanti e iniziare a definire la classe che renderà la nostra meta-scatola sul Aggiungi nuovo post pagina.
Aggiungere una Meta Box
Questa parte del tutorial assumerà che tu sia un po 'esperto nella creazione di meta-box. In caso contrario, non esitate a rivedere i concetti di questa serie e quindi tornare a questa parte una volta fatto.
Per prima cosa, creiamo un file chiamato
class-meta-box-display.php
nelAdmin
directory del nostro plugin. Il codice dovrebbe includere quanto segue. Assicurati di rivedere i commenti per assicurarti di aver compreso tutto ciò che questa classe è responsabile del fare.Dal codice qui sopra, dovresti essere in grado di accertarti che questa classe sarà responsabile della visualizzazione del contenuto all'interno della meta-scatola. Per ora, tuttavia, abbiamo semplicemente echeggiare un'affermazione per la vista.
Lo cambieremo più avanti nel tutorial.
Successivamente, abbiamo bisogno di introdurre una classe che rappresenti la stessa meta-box. Quindi crea un
class-meta-box.php
file nelAdmin
directory del nostro plugin. Ecco il codice per fare esattamente questo. Di nuovo, rivedi il codice e poi spiegherò cosa sta succedendo sotto la classe:display = $ display; / ** * Registra questa meta-box con WordPress. * * Definisce una meta-box che renderà le domande ispiratrici nella parte superiore * della barra laterale della pagina 'Aggiungi nuovo post' per aiutare a * bloggers con qualcosa su cui scrivere quando iniziano a scrivere un post. * / funzione pubblica init () add_meta_box ('tutsplus-post-questions', 'Inspiration Questions', array ($ this-> display, 'render'), 'post', 'side', 'high');Questa classe mantiene un singolo attributo che è un riferimento alla sua visualizzazione. Ciò significa che questa classe è responsabile della definizione del meta-box (che, a sua volta, chiama l'oggetto di visualizzazione per il rendering del messaggio).
Il display viene mantenuto come una proprietà privata impostata nel costruttore. La meta-box non è in realtà definita fino al
dentro
viene chiamato il metodo (che vedremo nel bootstrap del plugin più avanti nel tutorial).A questo punto, abbiamo tutto ciò di cui abbiamo bisogno per visualizzare una meta-scatola rudimentale su Aggiungi nuova pagina postale. Ma prima, dobbiamo impostare il bootstrap del nostro plugin.
Nei tutorial precedenti, ho fatto molto questo, quindi includerò appena il codice richiesto (dal momento che ho definito l'intestazione sopra). Ho aggiunto commenti, ma mi assicurerò anche di spiegare cosa sta succedendo dopo il codice.
Questo è particolarmente rilevante perché il nostro autoloader alla fine annullerà la necessità di alcune delle cose che vedrete.
dentro();Innanzitutto, ci assicuriamo che questo file non sia accessibile direttamente e che possa essere eseguito solo da WordPress stesso.
Avanti, noi
include_once
le classi che abbiamo creato finora. Successivamente, istanziamo ilMeta_Box
e passargli un'istanza delMeta_Box_Display
nel suo costruttore.Infine, chiamiamo il
dentro
metodo che risiede nelMeta_Box
classe.Supponendo che tutto vada bene, dovremmo essere in grado di attivare il plugin e vedere la meta-box su un Aggiungi nuovo post pagina (o, davvero, un Aggiorna post pagina, pure).
A questo punto, abbiamo un plugin funzionante, ma in realtà non fa altro che creare una meta-box e visualizzare una stringa di testo.
Diamo almeno fallo visualizzare alcuni preventivi di ispirazione e visualizzarne uno casuale ogni volta che la pagina viene caricata.
Visualizzazione di citazioni di ispirazione
In primo luogo, abbiamo bisogno di trovare un file di testo di citazioni di ispirazione. Fortunatamente Internet fornisce una pletora di questi che possiamo usare nel nostro progetto (e sono disponibili gratuitamente). A tal fine, ho creato un
dati
sottodirectory inAdmin
che sto usando per ospitare il mioquestions.txt
file.Successivamente, avremo bisogno di creare una classe che:
- Apri il file.
- Leggi una riga a caso in una stringa.
- Chiudi il file.
- Restituisce la stringa al chiamante.
Andiamo avanti e creare quella classe ora. Perché questa è un'utilità e verrà utilizzata nel lato amministrativo del plugin, creiamo un
util
sottodirectory inAdmin
. Quindi, creiamo un file chiamatoclass-domanda-reader.php
.Specificheremo il codice per questa classe in un attimo, ma torniamo al file bootstrap del plugin e ricordiamo di includere il file. Il codice risultante dovrebbe assomigliare a questo:
Come puoi vedere, il numero di file che dobbiamo includere manualmente si allunga. Immagina se stessimo lavorando su un grande plugin! Tuttavia, torneremo su questo più avanti nella serie.
Per ora, rivolgiamo la nostra attenzione al lettore di domande. Il codice per la classe dovrebbe assomigliare a questo:
open ($ nomefile); $ domanda = $ this-> get_random_question ($ file_handle, $ nomefile); $ this-> close ($ file_handle); restituire $ domanda; / ** * Apre il file per la lettura e restituisce la risorsa al file. * * @accesso privato * @param stringa $ nomefile Il percorso del file che contiene la domanda. * @return resource Una risorsa per il file. * / funzione privata aperta ($ nomefile) return fopen ($ filename, 'r'); / ** * Chiude il file letto. * * @accesso privato * @param stringa $ file_handle La risorsa del file letto. * / funzione privata close ($ file_handle) fclose ($ file_handle); / ** * Apre il file per la lettura e restituisce la risorsa al file. * * @accesso privato * @param stringa $ file_handle La risorsa del file letto. * @param string $ nomefile Il percorso del file che contiene la domanda. * @return string $ question La domanda da visualizzare nella meta-box. * / private function get_random_question ($ file_handle, $ nomefile) $ questions = fread ($ file_handle, filesize ($ nomefile)); $ questions = explode ("\ n", $ questions); // Cerca una domanda fino a quando una stringa vuota non viene più restituita. $ domanda = $ domande [rand (0, 75)]; while (vuoto ($ domanda)) $ question = $ questions [rand (0, 75)]; return $ question;Si noti che il codice per questo è relativamente semplice, ma se non si ha familiarità con alcune delle operazioni di base dei file in PHP, ecco cosa stiamo facendo:
- Stiamo aprendo il file usando
fopen
, che ci concederà una risorsa per leggere il file.- Successivamente, stiamo leggendo il contenuto del file e quindi prendendo ogni riga del file e scrivendola in un indice di un array.
- Dopodiché, selezioniamo un numero casuale dalla serie di domande e lo restituiamo al metodo che lo chiama. Se restituisce una stringa vuota, ricerchiamo finché non viene trovata una domanda.
- Quindi, chiudiamo la risorsa nel file.
In definitiva, per utilizzare questa classe, è sufficiente istanziarla, conoscere il percorso di un file pieno di domande e quindi chiamare il
get_question_from_file
metodo.Nota: Questa classe fa non fare qualsiasi gestione degli errori. È una pratica standard quando si lavora con i file. Ad esempio, cosa dovremmo fare se il file non esiste? Cosa dovremmo fare se non è formattato correttamente o se non riuscissimo a chiudere la risorsa?
Tutte queste sono buone domande, ma non rientrano nell'ambito di questo tutorial. Tutte queste informazioni possono essere trovate nel manuale PHP (e forse in altri tutorial attraverso la rete Envato Tuts +).
Per ora, però, ci preoccupiamo di leggere un file che sappiamo esistere, e siamo preoccupati di visualizzare i risultati in una meta-scatola.
Quello che abbiamo finora
A questo punto, possiamo iniziare a mettere tutto insieme. Supponendo di aver fatto tutto correttamente, dovremmo essere in grado di passare un'istanza di
Question_Reader
alMeta_Box_Display
, chiedere una domanda e quindi visualizzarla nella meta-scatola.Innanzitutto, aggiorniamo il file di bootstrap:
dentro();Nel codice sopra, nota che il
Meta_Box_Display
ora accetta un'istanza del lettore di domande nel suo costruttore. Ciò implica che avremo bisogno di introdurre una nuova proprietà, che faremo ora:question_reader = $ question_reader; / ** * Esegue il rendering di una singola stringa nel contesto della meta-box a cui appartiene questo * Display. * / public function render () $ file = dirname (__FILE__). '/Data/questions.txt'; $ question = $ this-> question_reader-> get_question_from_file ($ file); echo wp_kses ($ question);Si noti che questo file utilizza il percorso delle domande che il file ha aggiunto alla sottodirectory dei dati. A prescindere dal percorso che è hardcoded, questa classe dipende anche da un'istanza di
Question_Reader
.Per gli scopi della demo a cui stiamo lavorando (vale a dire, namespace e autoloading), va bene. In un progetto futuro, vorremmo che i progetti avessero meno accoppiamenti tra di loro. Forse questo sarà un argomento per un futuro tutorial.
Il primo asporto dal codice sopra, però, è che il
Meta_Box_Display
la classe può ora mostrare una domanda all'utente.Inoltre, notare l'uso di
wp_kses
per motivi di sanificazione dei dati prima di presentarli all'utente.Rinfrescando il Aggiungi nuovo post la pagina dovrebbe presentarti un'immagine come questa:
E se aggiorni la pagina, puoi vedere nuove domande che vengono caricate.
Dove andiamo da qui?
Ovviamente, dobbiamo ancora affrontare gli argomenti dei namespace e dell'autoloading, ma va bene! È importante porre le basi per un plug-in che non li utilizza. In questo modo, quando noi fare implementarli, possiamo vedere i benefici che portano.
Inoltre, abbiamo ancora del lavoro da fare: abbiamo bisogno di introdurre JavaScript e CSS e un caricatore di risorse. Questo ci consentirà di avere un quadro ancora più ampio di come sia vantaggioso impacchettare i nostri file in namespace.
Ricorda, puoi trovare tutti i miei tutorial precedenti sulla mia pagina del profilo e puoi seguirmi sul mio blog o su Twitter.
Come sempre, se stai cercando altre utilità che ti aiutino a costruire il tuo set crescente di strumenti per WordPress o codice di esempio per studiare e diventare più esperto in WordPress, non dimenticare di vedere cosa abbiamo a disposizione in Envato Mercato.
Detto ciò, avremo una versione funzionante del plug-in pronta per il download a partire dal prossimo tutorial di questa serie. Se desideri utilizzare il codice nell'esercitazione precedente, non esitare a provare a farlo. Inoltre, non esitate a fare domande nei commenti.
risorse