Nel mio precedente post ho parlato delle bad practices legate alle personalizzazioni di WP: in questo cercherò di introdurvi all’uso degli hook di WordPress, ed in particolare delle action. Ovviamente la vastità dell’argomento non mi permetterà di coprire tutti gli argomenti che vorrei, ma solo di fornire qualche buono spunto per capire come muoversi.
La regola del keep it simple (, stupid), valida in contesto IT e WEB in maniera pressocchè universale, verrà quindi applicata senza alcuno scruplo, lasciando comunque spazio alle vostre domande nei commenti.
Cominciamo subito!
Hook di WordPress: action e filter
Gli hook sono il pane quotidiano di chi fa personalizzazioni per questo sfruttatissimo blog: le action, più nello specifico, corrispondono ad azioni e/o “circostanze” che possono capitare sia all’utente loggato (backend) che a quello anonimo (frontend). I filter invece sono leggermente più complessi, e possiamo dire – approssimando un po’ – che servono a tirare fuori le informazioni che ci servono: titolo di un post, valore di un campo e così via.
Con questi due strumenti possiamo fare modifiche profonde sia al nostro theme (ovviamente child, altrimenti perderemo tutto il lavoro al prossimo update) che creare plugin personalizzati.
Leggi anche: Un Plugin Ajax per la Pagina delle Opzioni di WordPress
Come funzionano le action di WordPress
Come accennato nel post sulle personalizzazioni, gli hook e le action rappresentano parte degli strumenti adatti per imporre le nostre politiche a WordPress: un modo intuitivo per capire cosa fanno è il seguente. Poniamo di voler intervenire all’interno del backend del nostro sito, ad esempio innestando un link utile o del codice HTML dentro alla sezione amministrativa. Guardatevi dal pensare che si debbano cambiare i file PHP di WordPress per farlo, perchè tale approccio è sconsigliato per almeno due ragioni:
- molte sezioni del core di WordPress sono tanto complesse quanto ostiche da comprendere e/o modificare;
- le modifiche che fate sui file PHP in /wp-admin/, per capirci, si potrebbero perdere nei successivi update del blog.
Per fare una cosa del genere nel modo giusto (ad esempio per aggiungere un logo personalizzato sia in alto che in basso su ogni pagina) basta utilizzare le apposite action, nell’esempio la prima per “scrivere nell’header” e la seconda per fare lo stesso nel footer. Nel nostro caso, inseriremo tale codice dentro il file functions.php del nostro tema figlio, in modo che venga eseguito universalmente.
add_action( 'in_admin_header', 'insert_header' ); add_action( 'admin_footer', 'insert_footer' ); function insert_header() { echo '<div style="width:100%"><img src="http://esempio.com/header.jpg" width="100%" /></div>'; } function insert_footer() { echo '<div style="width:100%"><img src="http://esempio.com/footer.png" width="100%" /></div>'; }
Questo è l’esempio più semplice di hook che si possa pensare, e serve soltanto a rendere l’idea: il senso di quello che stiamo facendo è presto detto. Se inseriamo questo blocco di codice all’interno del nostro functions.php (in qualsiasi posizione va bene, salvo theme particolari), stiamo dicendo al core che deve richiamare le funzioni insert_header() e insert_footer() associandole ad un handle che fa quello che ci serve (il “corpo” della funzione, contenuto tra parentesi graffe).
Per estensione esistono action per ogni circostanza vi possa capitare, al fine di intervenire sul backend (ovunque, o solo in una pagina specifica) ed ovviamente pure sul frontend. Con un po’ di pratica (e ce ne vuole un po’) troverete quello che fa al caso vostro, assumendo che sappiate già come sfruttare i theme child (e suggerisco in proposito la lettura della nostra Introduzione all’uso dei temi figlio in wordpress). La vostra creatività, a questo punto, non troverà più alcun limite.
Riuscire ad avere chiaro questo scenario e farlo funzionare a nostro piacere, in questo momento, è già un buon passo per approcciare nel modo giusto al problema. Per inciso, per inserire il path dinamico di un’immagine (ad esempio contenuta nella cartella del theme child), uno dei modi possibili è quello di sfruttare la funzione:
get_stylesheet_directory_uri();
(e ne trovate altre equivalenti) in modo che il codice precedente diventi:
function insert_footer(){echo '<div style="width:100%"><img src="<?php echo get_stylesheet_directory_uri(); ?>/miofile.png" width="100%" /></div>';}
A questo punto è chiaro (…si spera!) che dentro le funzioni action può succedere qualsiasi cosa, compreso l’inserimento di codice PHP arbitrario e script in Javascript.
Siti di riferimento per personalizzare WordPress
È bene stare alla larga dai siti che presentano questi argomenti in maniera confusionaria: due buoni “posti” per iniziare a familiarizzare con snippet (frammenti di codice) di qualità e ben catalogati sono wpsnipp.com (davvero molto fornito) e il buon vecchio paulund.co.uk (non sempre aggiornatissimo, ma molto utile per la filosofia di fondo), senza dimenticare il database di hook creato da Adam R. Brown sul proprio sito, che trovo molto più utile e meglio organizzato di quanto non sia il codex. Su quest’ultimo, poi, c’è da dire che alcune voci non sono affatto presenti o sono spiegate male, ma resta pur sempre un punto di riferimento solido, oltre che l’unico ufficiale, rispetto ai vari forum più o meno scalcinati su cui troverete pressappoco le informazioni che cercate. Per gli utenti un po’ più esperti, anche GitHub offre un ottimo punto di riferimento: di recente, ad esempio, ho sfruttato un’eccellente estensione per creare pagine di opzioni del vostro theme (Options Framework Theme) semplicemente dichiarando variabili PHP. Purtroppo non esiste, al momento, una sezione apposita del repository per WordPress, ma basta cercare “wordpress” nel motore di ricerca per rendersi conto delle tante opzioni disponibili.
Per il momento è tutto, se avete domande ponetele pure nei commenti!