Mi servo del week end per introdurre un articolo su come creare plugin WordPress. Essendo Wp un Cms open source esiste una comunità altrettanto “open” che sviluppa quotidianamente plugin per scopi professionali e/o personali condividendoli con il modo intero. Girando un po’ nel web che parla italiano, ci sono una serie di indicazioni ma spesso poco chiare e frammentate, ma soprattutto forniscono indicazioni da automa (fai questo, poi quello) senza spiegare la giusta teoria e struttura base che permetterà al neo-sviluppatore di camminare su due piedi da subito. Partendo dal presupposto che WordPress ha come base di estensibilità una stragrande maggioranza di funzionalità di un portale, tutto il resto può essere implementato attraverso la realizzazione di un plugin WordPress.
Cosa ho bisogno di sapere prima di iniziare a creare plugin WordPress?
- Conoscenza base del linguaggio PHP;
- Conoscenza di SQL se il vostro plugin prevede interazioni con il database;
- Conoscenza del repository di WordPress (che vedremo più giù).
Se avete un po’ di pazienza, leggendo attentamente questo articolo non vi servirà altro per iniziare a creare il vostro primo plugin per WordPress.
Regole da seguire
Per essere accettato, il vostro plugin deve seguire dei piccoli standard di conformità:
- Compatibilità GPL (clicca qui per maggiori informazioni);
- Il plugin non deve essere scritto per scopi illegali, offensivi e/o immorali;
- Per la programmazione utilizzare il repository di WordPress che più in basso vedremo insieme (non sono ammesse funzioni arbitrarie del PHP, esempio: mysql_connect() o mysql_query());
- Non sono ammessi collegamenti a link esterni o powered by “link”, basta fare esplicita richiesta di permesso per poter usufruire di un “ritorno mediatico“;
Iniziamo!
Creando una cartella all’interno della directory “plugins” (in wp-content), rinominandola col nome del vostro plugin e senza spazi. Dopodiché passiamo alla creazione del nostro primo file PHP. Esso dovrà contenere un’intestazione di base che servirà a WordPress per riconoscere che si tratta di un plugin, per cui scrivere immaediatamente in cima la seguente sintassi:
/*
Plugin Name: Nome del plugin Plugin
URI: Url del plugin
Description: Descrizione
Author: Nome dello sviluppatore Version: Numero di versione (es. 1.0)
Author URI: Sito web personale
*/
Questo è il file principale della vostra prima applicazione le cui informazioni verranno visualizzate nella sezione “plugin installati” del pannello di controllo ottenendo una visualizzazione simile alla seguente:
- Nome del plugin;
- Descrizione;
- Autore;
- Link al plugin.
Ingegnerizzare il codice
E’ molto importante, soprattutto se si scrive un plugin abbastanza complesso fatto di parecchi file catalogare gli stessi in delle categorie di appartenenza, per la mia esperienza con i plugin WordPress sono solito creare oltre al file principale altri file suddivisi secondo un mio personale ordine logico:
- scripts.php che contiene le chiamate agli script;
- hooks.php all’interno del quale inserisco le funzioni, i metodi, le azioni ed filtri per “intromettermi” nei processi di wordpress;
- functions.php all’interno del quale scrivo il codice per il front-end;
- menu.php che contiene i le funzioni di chiamata ai menu personalizzati;
- script/ la cartella che contiene eventuali script;
- css/ la cartella che contiene eventuali css;
Hooks, cosa sono?
Se state iniziando a prendere confidenza con il repository di wordpress, sicuramente dovete mettervi in testa questa parola, poiché utilizzerete un “uncino” (hook) praticamente sempre, se vi cimentate nella realizzazione di plugin con WordPress. E’ possibile, infatti, letteralmente “agganciare” un’azione che WordPress compie durante la sua vita: autenticarsi è un’azione, consultare un articolo è un’azione, effettuare il logout è un’azione, insomma, è possibile modificare ogni azione che un utente compie nella navigazione.
Gli hook ci consentono di personalizzare particolari eventi di default di WordPress, con azioni custom.
Esempio: ogni volta che qualcuno pubblica un post, voglio inviare una mail al mio indirizzo di posta elettronica:
function mario_sendMail(){
mail("info@marioconcina.it", "Notifica su Marioconcina.it", "Ciao, è stato inserito un nuovo post su marioconcina.it");
}
add_action('publish_post', 'mario_sendMail');
add_action è una funzione mnemonica del repository di wordpress, lavora esattamente nel modo in cui si legge, in questo caso: appena viene effettuata l’azione ‘publish_post’ parte la mia funzione ‘mario_sendMail’, semplice no? In questo modo non dobbiamo abbassarci più di tanto per capire a fondo cosa accade e cercare fisicamente la funzione “publish_post” per modificarla nel suo core.
Bene! Già questo assaggio di script potrebbe essere un primo plugin ma sarebbe troppo riduttivo se ci fermassimo qui, considerato il repository di WordPress un oceano in continuo movimento.
Chiaramente gli hooks sono tantissimi ed è impossibile tenerli tutti a mente per cui vi segnalo un’ottima risorsa da cui attingere per cercare “l’aggancio” che fa al caso vostro: http://adambrown.info/p/wp_hooks/hook o se volete andare sul sicuro, dalla documentazione ufficiale di WordPress: https://codex.wordpress.org/Plugin_API/Action_Reference.
Query ed interazioni con il database
Anche qui abbiamo una serie di metodi già pronti per effettuare query ed aggiornamenti di ogni tipo. Sostanzialmente WordPress offre una variabile globale da richiamare ogni volta abbiamo bisogno di relazionarci con il database, si chiama $wpdb, ma vediamo alcuni esempi:
query('insert into'); //utilizza query per operazioni di tipo inserimento, aggiornamento, cancellazione
//per selezionare un singolo record è indicata la funzione get_row()
$prelievo = $wpdb->get_row('select * from table where id = ' . $id);
echo $prelievo->nome; //nome corrisponde al campo che voglio stampare;
//per stampare una serie di record utilizzare la funzione get_results
$risultati = $wpdb->get_results('select * from table');
foreach($risultati as $risultato){
echo $risultato->nome;
}
Queste sono solo una serie di funzioni che potete consultare nella documentazione ufficiale di WordPress, se invece abbiamo a che fare con tabelle già esistenti (ad esempio wp_options) possiamo sfruttare i metodi già esistenti per estrarre dati:
add_option("chiave", "valore"); //aggiunge un record alla tabella wp_option
update_option("chiave", "valore"); //aggiorna un record della tabella wp_option
remove_option("chiave", "valore"); //elimina un record dalla tabella wp_option
get_option(''chiave"); //fornita in input la chiave restituisce il rispettivo valore
Insomma, le funzioni sono davvero tante e ci facilitano la vita!
Gestione dei menu
Se avete capito il meccanismo degli hooks inserire un menu personalizzato nel pannello di controllo wordpress è un gioco da ragazzi:
function marioMenu(){
add_menu_page('Mario Plugin', 'Mario Plugin', 'administrator', 'MarioPlugin', 'MarioPlugin');
add_submenu_page('Inserimento', 'Inserimento', 'Inserimento', 'administrator', 'MarioInserimento', 'MarioInserimento');
}
add_action('admin_menu', 'marioMenu');
Ho costruito la mia funzione marioMenu(), applicando un “hook”, al momento che WordPress costruisce il menu si ricorda che deve accodare a tutto il resto anche il mio. Per aggiungere le voci ho utilizzato 2 funzioni:
add_menu_page(TITOLO PAGINA, TITOLO DEL MENU, LIVELLO DI ACCESSO, SLUG, FUNZIONE CHE RICHIAMA LA VOCE, URL ICONA OPZIONALE);
/*add menu page è l'intestazione del nostro menu, il suo rispettivo collegamento ipertestuale sarà legato alla funzione
che gli diamo in pasto come ultimo parametro non opzionale.*/
add_submenu_page(PARENT SLUG, TITOLO PAGINA, TITOLO MENU, LIVELLO DI ACCESSO, SLUG, FUNZIONE);
//Aggiunge il sotto menu al menu appena creato
add_options_page('My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options');
//Questa funzione viene utilizzata se non si vuole inserire un menu dedicato ma far accodare la voce di menu, ad esempio ad "Impostazioni".
Includere css e script
E’ possibile che il nostro plugin necessiti di inclusioni css e/o javascript, niente paura anche per queste cose il repository offre delle funzioni niente male, prima di tutto se si tratta di jQuery, ThickBox e altre librerie abbastanza diffuse, WordPress le porta già con se:
wp_enqueue_script('jquery');
wp_enqueue_script('thickbox');
Senza nemmeno preoccuparci di dover inserire fisicamente questi file, WordPress è cosi gentile da prestarci i suoi.
Se invece dovessimo inserire funzioni custom, basta includere fisicamente il file e richiamarlo cosi:
wp_enqueue_script('marioControlli', 'scripts/controlli.js', '');
//il primo campo etichetta un nome indicativo, il secondo include il file mentre il terzo è opzionale
Per i css, invece:
wp_enqueue_style('marioStyle', 'css/mario.css');
Questa è una regola che vale anche per la realizzazione di temi WordPress.
Caricare il plugin sul repository ufficiale di WordPress
Come inviare il plugin a WordPress? Basta registrarsi, accedere alla seguente pagina: http://wordpress.org/extend/plugins/add/ e, se il plugin rispetta tutte le regole di conformità entrerà a far parte della grande comunità di WordPress.
Accorgimenti
Utilizzate nomi di cartelle, funzioni e variabili con prefisso del vostro plugin, esempio:
Nome del plugin: Mario Newsletter
Nome cartella: mario_newsletter
Nome di pagine: mario_invia.php
Nome di funzione: mario_invia();
Nome di variabile: $mario_users;
Cosi facendo si evitano conflitti. Questo accade poiché ci possono essere plugin che utilizzano nomi di funzioni, files, variabili più o meno comuni. Sembra una sciocchezza ma è un accorgimento che evita problemi maggiori;
Utilizzate le classi per evitare conflitti;
Cercate di creare meno tabelle possibili, agganciatevi finchè potete a quelle esistenti (è possibile sfruttare la tabella wp_options per i settaggi “chiave-valore”).
Conclusioni
Come avete visto creare plugin WordPress non è poi chissà quale impresa di programmazione, basta seguire piccole accortezze e prendere confidenza con il vasto repository.
Lascio aperti i commenti per rispondere ad eventuali chiarimenti e delucidazioni vista la lunghezza dell’articolo.