Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Introduzione agli hooks di WordPress

Link copiato negli appunti

WordPress mette a disposizione un buon numero di funzionalità per la gestione di contenuti e comportamenti, in alcuni casi però potrebbe essere necessario estendere tali strumenti o i plugin che ne fanno uso ai fini della personalizzazione.

In questo senso gli hooks rappresentano un'opportunità interessante e saranno l’argomento di questa breve trattazione che verrà suddivisa in due parti: la prima dedicata alla loro presentazione e la seconda alla loro adozione nella pratica dello sviluppo per il noto Blog engine.

Cosa sono gli hooks e perché utilizzarli

Gli hooks (letteralmente “ganci”) di WordPress permettono di modificare il comportamento del Blog engine o di una sua estensione senza alterare il core dell’applicazione e i file che lo compongono.

Per gli sviluppatori il vantaggio derivante dall'utilizzo di questa particolare tecnica risulta quindi evidente: un core in versione originale potrà essere aggiornato in qualsiasi momento ad una versione successiva senza dar luogo ad incompatibilità e le funzionalità aggiuntive introdotte attraverso gli hooks verranno, in buona parte dei casi, mantenute.

Gli hooks funzionano in base ad un semplice meccanismo fondato sugli eventi. In pratica, nel momento in cui dovesse verificarsi un determinato evento a carico di un blog realizzato con WordPress, avrà luogo una specifica azione (o più azioni) in risposta a quest’ultimo.

Le azioni relative agli hooks sono in buona parte già previste dall'applicazione, ad esse sarà possibile "agganciare" nuove funzionalità; quindi, attraverso gli hooks si potranno anche implementare o reimplementare comportamenti già supportati dal Blog engine.

Sostanzialmente esistono due tipologie di hooks:

  • Action hooks
  • Filter hooks

in numerosi casi sarà possibile ottenere lo stesso risultato indipendentemente dalla tipologia di riferimento, questo per via del fatto che non di rado le action functions e le filter functions sono in grado di agire sui medesimi contenuti.

Le caratteristiche degli Action hooks

Un Action hook è un tipo particolare di hook che consente di gestire esecuzioni condizionate al raggiungimento di un determinato punto previsto per un evento; la risposta (e quindi l’esecuzione) definita attraverso un gancio, che potrebbe essere l’invio di un’email così come la visualizzazione di uno specifico contenuto, verrà quindi accodata a tale punto in modo da dar luogo ai comportamenti desiderati.

Esistono svariati eventi ricollegabili alle actions, come per esempio la sostituzione del tema corrente di un blog o la semplice messa on line di un testo; dal punto di vista formale le actions non sono altro che delle funzioni PHP che possono essere “agganciate” ad un evento tramite la funzione add_action(); per il suo utilizzo quest’ultima prevede la seguente sintassi:

add_action ( 'nome_gancio', 'nome_funzione', [priorità], [argomenti_accettati] );

Nello specifico i parametri consentiti da add_action() sono:

Parametro Descrizione
nome_gancio È il nome dell’Action hook che permette il collegamento tra evento e funzione
nome_funzione È il nome della funzione che dovrà essere eseguita in seguito all’evento specificato tramite il parametro procedente, quest’ultima potrà essere una funzione nativa PHP così una funzione prevista dal core di WordPress o in un’estensione
priorità Si tratta di un argomento opzionale rappresentato da un valore numerico intero (“10” come impostazione predefinita); esso indica l’ordine di esecuzione di una funzione associata ad un evento specifico, un valore basso determinerà un’esecuzione anticipata mentre gli stessi livelli di priorità saranno gestiti per ordine di inserimento
argomenti accettati Parametro numerico intero facoltativo che indica il numero di argomenti che potranno essere passati ad una funzione (1 come impostazione predefinita)

A meritare una menzione ulteriore è il cosiddetto “valore di ritorno”, cioè il valore eventualmente modificato del primo argomento passato alle funzione.

Sostanzialmente, la definizione di un Action hook consiste quindi nei tre passaggi proposti di seguito:

  1. creazione o utilizzo a livello di plugin di una funzione PHP che dovrà essere eseguita quand il Blog engine da luogo ad uno specifico evento;
  2. “agganciamento” tramite add_action() della funzione precedentemente introdotta all’evento generato da WordPress;
  3. inserimento della funzione PHP in un file di plugin e conseguente attivazione.

Da notare che, così come è possibile aggiungere actions ad un hook, è altresì possibile rimuoverle, in questo caso bisognerà far ricorso alla funzione remove_action(), opposta ad add_action(), alla quale si dovranno passare come parametri il nome dell’hook interessato dalla rimozione e il nome della funzione action da escludere.

Il funzionamento dei Filter hooks non è particolarmente differente da quello appena descritto, ma questi ultimi presentano delle caratteristiche peculiari rispetto agli Action Hooks che verranno introdotte nel prosieguo di questa trattazione.

Le peculiarità dei Filter hooks

Introducendo gli Action hooks è stato detto che essi lavorano sulla base di un determinato riferimento che potremmo chiamare “punto di esecuzione del codice”, i Filter hooks vengono invece utilizzati per alterare l’output di un evento in corrispondenza di un punto specifico, quindi, generalizzando all’estremo, sarebbe possibile affermare che li dove gli Action hooks “aggiungono”, i Filter hooks “modificano”.

Ciò è possibile attraverso le cosiddette filter functions; in pratica queste ultime si presentano come delle funzioni che l’applicazione utilizza per effettuare un passaggio di dati, in un determinato modo, ad un certo punto di un’esecuzione, subito prima che i dati stessi vengano manipolati in seguito al verificarsi di un evento.

Tecnicamente è possibile affermare che, nella generazione dei contenuti, le funzioni filtro si posizionano tra il database e il client quando vengono prodotte le pagine, mentre agiscono tra il client e la base di dati quando avviene l’inserimento di articoli e relativi commenti; in WordPress molte delle esecuzioni effettuate generano input che passano attraverso dei filtri, essi fungono essenzialmente da strutture di controllo in grado di accettare i dati nel loro formato originale per poi restituirli modificati.

A livello sintattico un Filter hook è generalmente rappresentabile nel modo seguente tramite una struttura che, per alcuni aspetti, presenta delle similitudini con quella degli Action hooks:

add_filter ( 'nome_hook', 'funzione_filtro', [priorità], [argomenti_accettati] );

Nello specifico viene proposto un costrutto basato sulla funzione add_filter() che ha il compito di agganciare una determinata funzione ad un’azione destinata a filtrare i dati; per quanto riguarda i parametri che entrano in gioco (o potrebbero farlo) nel corso di una chiamata ad add_filter(), essi sono sostanzialmente quattro:

Parametro Descrizione
il nome dell’hook Obbligatorio, esso è in pratica il nome di un Filter hook messo a disposizione dal Blog engine che ha il compito di stabilire quando il filtro associato ad esso dovrà essere applicato
funzione_filtro Si tratta di un argomento obbligatorio attraverso il quale sarà possibile indicare il nome della funzione che si desidera utilizzare per modificare un input; essa potrà essere rappresentata da diversi costrutti, come per esempio una qualsiasi funzione di PHP, una funzione fornita dal core dell’applicazione o una funzione definita nel file di un’estensione
priorità È un argomento facoltativo espresso tramite un valore numerico intero il cui valore predefinito è pari a “10” (come accade anche negli Actions hooks); nel caso in cui vengano utilizzate più funzioni associate ad un determinato filtro la priorità ne definisce l’ordine di esecuzione, per cui valori bassi si tradurranno in esecuzioni prioritarie rispetto alle altre. Nel caso di valori identici varrà l’ordine di passaggio al filtro
argomenti accettati Si tratta anche in questo caso di un parametro in comune con gli Action hooks che presenta le medesime caratteristiche, cioè il fatto di essere rappresentato da un numero intero (corrispondente di default all’unità) attraverso il quale definire quanti argomenti possano essere passati al “gancio” nel caso in cui vi sia la possibilità di utilizzare più parametri per la medesima funzione

Anche in questo caso, nello stesso modo in cui è possibile aggiungere Filters ad un hook, sarà possibile cancellare alcune di queste associazioni; per far questo sarà necessario ricorrere alla funzione remove_filter(), contraria ad add_filter(), a cui si dovranno passare come parametri il nome dell’hook e quello della funzione filtro da rimuovere.
Formalmente, la corretta definizione di un Filter hook prevede l’espletamento dei seguenti passaggi:

  1. generazione della funzione PHP per il filtro dei dati;
  2. definizione del “gancio” tramite add_filter();
  3. inserimento della funzione PHP in un file di plugin e successiva attivazione.

Anche in quest’ultimo caso non sono previste modalità nettamente differenti a quelle adottabili per gli Actions hooks, ma le peculiarità dei Filter hooks emergeranno più chiaramente quando verranno presentati alcuni esempio di utilizzo a livello pratico.

Conclusioni

In questa trattazione sono state descritte le caratteristiche di Action hooks e Filter hooks in WordPress, due strumenti che potrebbero risultare particolarmente utili per l’esecuzione di operazioni attinenti l’integrazione di nuove funzionalità e l’alterazione dei dati.

A questa parte ne farà seguito un’altrà dedicata al loro utilizzo pratico, ma per chi volesse approfondire da subito l’argomento è disponibile un apposito riferimento online denominato “WordPress Hooks Database”, aggiornato all’ultima versione del Blog engine, in cui sono presenti numerosi hooks divisi per tipologia nonchè le segnalazioni su quelli da considerarsi ormai deprecati.

Ti consigliamo anche