Anatomia di un plugin WordPress

WordPress è ben noto per la sua straordinaria collezione di plugin gratuiti. Ce n'è uno per quasi ogni esigenza
puoi pensare di eseguire il backup della tua installazione di WordPress per chiedere una tazza di caffè
o combattere lo spam.

Ma ci sono momenti in cui nessuno dei plugin disponibili sembra fare abbastanza il trucco che stai cercando. Per aiutarti in momenti come
questo tutorial ti guiderà attraverso ogni fase della creazione di un semplice plugin WordPress con impostazioni.


Scrivere il tuo plugin non è una scienza missilistica riservata ai programmatori più esperti. Tutto ciò di cui hai bisogno
è una comprensione di base di
il linguaggio di programmazione PHP e alcune informazioni su come WordPress si aspetta che il tuo plugin si comporti. Questo tutorial ti fornirà quest'ultimo.

L'obiettivo. il gol

Prima di iniziare, permettimi di introdurre il concetto del plug-in e quello che stiamo cercando di ottenere con esso.

"Coming Next" sarà un plugin per widget che interroga un determinato numero di post sul blog programmati per il futuro e li elenca nella barra laterale del blog (o dove mai
il proprietario del blog decide di posizionare il widget). Il widget sarà personalizzabile in modo che l'utente possa decidere quanti post vuole elencare,
se deve essere mostrato un riassunto del post e quale dovrebbe essere il formato della data. L'aspetto del widget dovrebbe essere facilmente personalizzabile tramite CSS.

Ecco un rapido disegno di come potrebbe apparire il widget in azione:


Iniziamo!

Passaggio 1: il modello di plugin

I plugin in WordPress sono file PHP che sono stati inseriti in wp-content / plugins directory sotto la directory di installazione di WordPress.

Per i plugin semplici che si adattano perfettamente a un solo file, come quello che stiamo creando oggi, è sufficiente creare un singolo file PHP e caricarlo sul
directory dei plugin. Tuttavia, è buona norma creare sempre una directory separata per ogni plug-in e in questo modo aiutare i proprietari dei blog a mantenere i loro plug-in
organizzato. Ciò renderà anche più semplice espandere il tuo plugin se hai bisogno di aggiungere nuovi file.

Creiamo una directory per il plugin "Coming Next":


Directory creata: / wp-content / plugins / coming-next

In questa nuova directory, creiamo quindi il file PHP principale del plugin. Chiamiamolo coming-next.php.

Durante la ricerca di plug-in, WordPress passa attraverso ogni file all'interno della directory del plugin alla ricerca di commenti che identificano i file come plug-in. Quello
la sezione commenti dice le informazioni di base sul plugin e al minimo indispensabile per contenere il nome del plugin.

Ecco come apparirà il blocco del commento per il nostro plugin "Prossimo prossimo":

 

Salva il file e vai alla pagina dei plug-in nell'area di amministrazione di WordPress. Il plugin, con tutte le informazioni aggiunte nel commento,
è già visibile nella lista dei plugin:


Ecco come appare il plugin nell'elenco dei plugin

Puoi già attivare il plugin, ma poiché non abbiamo ancora inserito alcun codice, non accadrà nulla. Abbiamo bisogno di alcune funzionalità.

Passaggio 2: aggiunta di funzionalità

Nella sua forma più semplice, un plugin WordPress non è altro che una o più funzioni inserite in un file plugin.

Tutte le funzioni create nei plug-in sono visibili sia per il tema corrente che per altri plugin attivi, quindi è possibile

usa il sistema di plugin per estendere la piattaforma con nuove funzioni e poi chiamale direttamente dal tuo tema.

Facciamolo prima e crea la funzione al centro del plugin "Prossimo Prossimo", list_upcoming_posts ().

Una parola di avvertimento è a posto prima di iniziare: perché tutte le funzioni aggiunte nei file plugin saranno visibili in tutto il tuo
Installazione di WordPress, è necessario fare molta attenzione quando li si nomina. Se ci sono due funzioni con lo stesso nome
in due (o più) plugin diversi, entrano in conflitto e le cose non possono funzionare.

Per i plugin più grandi è una buona idea fare una programmazione orientata agli oggetti e creare classi per incapsulare le parti
della funzionalità. Ciò ti darà più libertà nel nominare le tue funzioni e variabili. In plugin più piccoli come
questo, devi solo stare attento, e provare a usare nomi di funzioni descrittivi che pensi che nessun altro stia usando.

 function list_upcoming_posts ($ num_posts = 1, $ show_excerpt = false, $ text_format = "Coming Up su [date]") $ posts = get_posts ("numberposts =". $ num_posts. "& order = ASC & post_status = future"); eco "
    "; globale $ post; $ old_post = $ post; foreach ($ post come $ post): setup_postdata ($ post); $ my_date = the_date (", ",", FALSE); $ coming_up_text = str_replace ("[date]", $ my_date, $ text_format); ?>
  • ";

Questa funzione utilizza il get_posts () WordPress
funzione per recuperare tutti i messaggi futuri come specificato in $ num_posts parametro, o tutti i post futuri
Se $ num_posts è maggiore del numero effettivo disponibile.

Quindi esegue il rendering di un elenco che include i titoli dei post, le loro date pianificate e l'estratto del post se $ show_excerpt è impostato su true.

Nota che abbiamo bisogno di usare il globale $ postale variabile per impostare i dati del post (vedere la riga 10) per le chiamate di funzione
come il titolo() lavorare. Ora, nel caso in cui il modello del blog abbia bisogno di accedere al post corrente dopo aver eseguito il rendering del plugin,
abbiamo bisogno di rimettere il post originale una volta che abbiamo finito (vedere le righe 7 e 26-27). In caso contrario, il resto del contenuto verrà reso utilizzando l'ultimo
post che è stato impostato utilizzando setup_postdata ().

Congratulazioni! Hai appena scritto il tuo primo plugin per WordPress e puoi testarlo aggiungendo questa chiamata da qualche parte nel tuo modello di blog:

 

Crea un post intitolato "Ritorno al futuro" e pianificalo per apparire sul tuo blog il 1 ° gennaio 2020. Ecco cosa dovresti vedere:


Il plugin in azione. Senza uno stile CSS ancora.

Passaggio 3: Creare il widget

Per alcuni plugin, avere solo una funzione che puoi chiamare dal tuo tema è più che sufficiente. Ma per questo plugin, penso che lasciare l'utente
personalizzare l'output attraverso la sua pagina di amministrazione di WordPress fornirà un bel tocco finale. E il sistema di widget di WordPress è il modo perfetto per
raggiungere quel livello di facilità d'uso.

Nel caso in cui non si abbia ancora familiarità con il concetto di Widget di WordPress,
ecco cosa dice la documentazione di WordPress su di loro:

I widget di WordPress consentono di aggiungere facilmente elementi di design, gadget, contenuti, immagini e altro alla barra laterale di WordPress per personalizzarli
il tuo blog senza conoscere HTML, PHP o qualsiasi codice. Molti plugin WordPress ora sono dotati di una versione Widget per consentire una facile aggiunta alla barra laterale.

Se il tema supporta i widget, puoi andare alla scheda Widget nella sezione Design dell'area di amministrazione di WordPress e assegnare i widget alle diverse
posizioni che il designer di temi ha creato per loro:


La schermata delle impostazioni "Widget"

Per far funzionare il nostro plugin "Coming Next" come un widget, dobbiamo prima creare una funzione per il rendering del widget. Come possiamo riutilizzare il
list_upcoming_posts () funzione che abbiamo creato in precedenza, questo compito sarà piuttosto semplice.

Ecco il codice per il widget nella sua forma più semplice:

 function widget_coming_next ($ args) extract ($ args, EXTR_SKIP); echo $ before_widget; list_upcoming_posts (); echo $ after_widget; 

Tutto ciò che fa è che estrae il markup HTML che il designer del tema ha impostato per essere renderizzato prima ($ before_widget) e
dopo ($ after_widget) ogni widget, quindi lo esegue nella lista dei prossimi post.

Il estratto() la funzione è PHP standard.
Prende i campi dall'array dato ($ args) e crea variabili locali al di fuori di esse. Un altro modo di
fare la stessa cosa sarebbe stato fare riferimento all'array usando direttamente "before_widget" e "after_widget" come indici di array.

Ora, il widget sa come eseguire il rendering. Ma prima che possa essere aggiunto a un blog, dobbiamo comunque dire a WordPress di aggiungerlo alla lista
di widget nella pagina di amministrazione. Questo viene fatto creando una funzione di inizializzazione che registra il widget della barra laterale e l'aggiunta
un plugin hook per chiamare quella funzione dopo tutto WordPress
i plugin sono stati caricati in memoria.

 function widget_coming_next_init () wp_register_sidebar_widget (COMING_NEXT_WIDGET_ID, __ ('Coming Next'), 'widget_coming_next');  // Registra il widget su WordPress add_action ("plugins_loaded", "widget_coming_next_init");

La funzione di inizializzazione chiama wp_register_sidebar_widget ()
per registrare il widget su WordPress. La funzione ha bisogno di tre parametri: un identificativo univoco per il widget, un nome da utilizzare sui Widget
pagina nell'area di amministrazione e il nome della funzione che renderà il widget.

Per semplificare le cose, se dovessimo mai cambiare l'identificatore univoco, ne ho creato una costante. In questo modo, quando usiamo la stessa costante ovunque,
dovremo aggiornarlo solo in un posto. Aggiungi questa definizione costante all'inizio del file del widget, subito dopo il blocco dei commenti che identifica il plug-in:

 define (COMING_NEXT_WIDGET_ID, "widget_coming_next");

Ora, quando andate a vedere la pagina "Widget", vedrete il nuovo widget lì in attesa di essere aggiunto sul blog. E quando aggiungi
il widget in una posizione di widget, vedrai i post successivi apparire proprio dove li metti!


Il widget "Prossimo" è ora stato aggiunto all'elenco dei widget.

Passaggio 4: Impostazioni widget

Infine, per completare il plugin, creeremo un menu delle impostazioni per l'aggiornamento delle preferenze del widget. La casella delle impostazioni conterrà tutti uguali
parametri che il list_upcoming_posts () la funzione prende come parametri. Poiché questa funzione è già stata eseguita e
sa come gestire i parametri, tutto ciò che rimane è creare il menu delle impostazioni e salvarlo e recuperare le impostazioni.

Proprio come per il rendering del widget, creeremo una funzione che esegue il rendering del menu delle impostazioni e memorizza le impostazioni
nell'archiviazione persistente, quindi comunica a WordPress la funzione in modo che sappia di mostrarla durante l'aggiunta o la modifica del widget.

Ecco il codice per l'archiviazione e il ripristino delle impostazioni:

 function widget_coming_next_control () $ options = get_option (COMING_NEXT_WIDGET_ID); if (! is_array ($ options)) $ options = array ();  $ widget_data = $ _POST [COMING_NEXT_WIDGET_ID]; if ($ widget_data ['submit']) $ options ['num_posts'] = $ widget_data ['num_posts']; $ options ['coming_up_text'] = $ widget_data ['coming_up_text']; $ options ['show_excerpt'] = $ widget_data ['show_excerpt']; update_option (COMING_NEXT_WIDGET_ID, $ options);  // Render form $ num_posts = $ options ['num_posts']; $ coming_up_text = $ options ['coming_up_text']; $ show_excerpt = $ options ['show_excerpt']; // Il modulo HTML andrà qui

Il cuore di questa funzione sono queste due chiamate all'API di WordPress:
get_option () sulla linea 2 e
update_option () sulla linea 13.
update_option () può essere usato per salvare qualsiasi variabile nel database di WordPress come coppia chiave-valore e get_option a
leggilo.

Ad esempio, nello snippet di codice sopra riportato, vedrai che nella riga 13, update_option () è usato per memorizzare il $ options array con il
chiave COMING_NEXT_WIDGET_ID.

Per rendere le cose più organizzate, invece di salvare ogni variabile come una coppia chiave-valore separata, le abbiamo inserite in
array ($ options) che può essere salvato in una volta sola.
Questo array contiene quindi tutti i dati relativi a questo widget. L'array viene caricato all'inizio della funzione in modo che i dati siano disponibili
per il rendering del modulo delle impostazioni e le impostazioni esistenti possono essere utilizzate come impostazioni predefinite del modulo e non si perdono quando il modulo viene inviato.

Il widget_coming_next_control () la funzione viene richiamata sia quando il modulo delle impostazioni viene visualizzato per la prima volta, sia quando l'utente preme il pulsante "Salva modifiche"
per memorizzare le impostazioni. Per identificare se il modulo è stato inviato o meno, utilizziamo un campo nascosto
chiamato COMING_NEXT_WIDGET_ID [presentare]. Se il campo nascosto è stato salvato, leggiamo nei parametri dal
formali e salvali (righe 8-14). E in entrambi i casi, se i dati vengono salvati o meno, il modulo viene visualizzato.

A proposito di forme, quella parte centrale è ancora mancante. Copia il modulo sottostante e mettilo alla fine della funzione appena creata
(subito dopo la linea 21, prima della parentesi di chiusura):

 ?> 

Se osservi attentamente il modulo, noterai che non ci sono tag di apertura o di fine modulo. Questo perché tutti i widget attivi lo sono
mettere nello stesso modulo, renderizzato da WordPress, e vengono salvati con una sola pressione di "Salva modifiche". Questo sarà utile quando decidi di scrivere
un widget che può essere aggiunto molte volte, come ad esempio il widget di testo di WordPress (quando lo fai devi essere consapevole di più widget
e tutti i loro diversi stati allo stesso tempo). Ma per ora significa solo che devi stare attento a come dai il nome ai campi nella tua parte del modulo.

In questo plugin, ho deciso di usare il COMING_NEXT_WIDGET_ID costante come identificatore per definire quali dei campi appartengono a questo widget.
Usando il WIDGET_ID [field_id] notazione nel nome parametri del nostro ingresso i tag fanno cose
bello per noi come vengono analizzati in un array con field_id come indice dell'array.

Dopo aver creato la funzione della schermata delle impostazioni, dobbiamo ancora dire a WordPress di usarlo. Questo viene fatto con il seguente hook.
Aggiungilo al widget_coming_next_init () funzione che abbiamo creato in precedenza:

 wp_register_widget_control (COMING_NEXT_WIDGET_ID, __ ('Coming Next'), 'widget_coming_next_control');

Ora, quando vai ad aggiungere o modificare il widget, vedrai che sono apparse nuove opzioni:


Il widget ora ha le impostazioni

Ultimo ma non meno importante, faremo il rendering del widget utilizzando le impostazioni definite nella casella delle impostazioni. È davvero abbastanza semplice: tutto ciò di cui abbiamo bisogno
fare è leggere le impostazioni usando il get_option () funzione. Sostituisci la funzione di rendering widget precedentemente creata con
questa nuova versione:

 function widget_coming_next ($ args) extract ($ args, EXTR_SKIP); $ options = get_option (COMING_NEXT_WIDGET_ID); // Interroga il prossimo post programmato $ num_posts = $ options ["num_posts"]; $ show_excerpt = $ options ["show_excerpt"]; $ coming_up_text = $ options ["coming_up_text"]; echo $ before_widget; list_upcoming_posts ($ num_posts, $ show_excerpt, $ coming_up_text); echo $ after_widget; 

Questo è tutto. Ora hai creato un widget di WordPress con le impostazioni!
L'output sembra ancora piuttosto noioso, ma con un piccolo tocco di CSS, si animerà e si abbinerà perfettamente al tema del tuo blog.


Il widget Prossimo è in azione