Una guida agli hook di WordPress

Pubblicato: 2021-07-19

Il sistema di hook può sembrare scoraggiante per chi non lo sapesse, ma sono una delle cose migliori di WordPress. Questa guida ti aiuterà a comprendere i fondamenti degli hook e come usarli, fornendo esempi di utilizzo e ulteriori consigli.

Perché dovresti usare i ganci?

Nel caso in cui non si è già a conoscenza, si tratta di una pessima idea di file cambiamento di base in WordPress (WP). Rischi per la sicurezza a parte, le tue modifiche verranno sovrascritte ogni volta che aggiorni WP! Lo stesso vale per plugin e temi.

Certo, si potrebbe tenere traccia di ogni aggiornamento e re-implementare le modifiche. Si potrebbe anche perforare attraverso un alveare per arrivare al miele. Potrebbe sembrare conveniente, ma è probabile che prima o poi verrai punto.

In parole povere, dovresti usare gli hook perché compensano i rischi di cambiare le funzionalità di base .

In questo senso l'importanza degli hook non può essere sopravvalutata . Sono la chiave per l'estensibilità di WP e una pietra angolare dei suoi plugin e degli ecosistemi di temi. Ti risparmierai un sacco di mal di testa imparando le basi e utilizzandole bene.

Quali sono?

Puoi pensare agli hook come eventi che si verificano durante la sequenza di caricamento di WP. Quando WP incontra un hook, attiva tutte le funzioni ad esso collegate prima di continuare.

Puoi quindi sfruttare gli hook per aggiungere funzionalità o modificare le variabili in tutto WP . Puoi utilizzare i ganci esistenti e aggiungerne di nuovi. Puoi rimuovere i ganci che non ti servono. Puoi colpire lo stesso gancio più di una volta, dando la priorità a ciascuna funzione come meglio credi. È un sistema molto flessibile, limitato solo da quali hook sono disponibili e da quali dati espongono.

Come funzionano?

Aggiungi una o più funzioni a un hook. Altre funzioni possono anche essere aggiunte dal tuo tema, plugin o WP stesso. Quando WP viene caricato, incontrerà l'hook. Controlla un elenco di tutte le funzioni associate all'hook. WP esegue tutte queste funzioni in ordine di priorità . Una volta fatto, riprende a caricare tutto dopo l'hook.

Come sono fisicamente?

L'aggiunta di una funzione a un hook è simile a questa:

add_action( $nome_gancio, $nome_funzione, $priorità, $argomenti);

$hook_name è il nome dell'hook che vuoi scegliere come target

$function_name è il nome della funzione che vuoi aggiungere a quell'hook

$ priorità è un intero che indica il $ function_name 's priorità $ hook_name' coda di s. Più basso è il numero, maggiore è la priorità. A partire da 1, questo numero può essere alto quanto vuoi (entro i limiti di sistema) ma è improbabile che lo trovi più alto di 40. Il valore predefinito è 10.

$arguments è un numero intero che indica il numero di argomenti che stai utilizzando nella funzione. Questo deve corrispondere al numero di argomenti passati alla funzione. Il valore predefinito è 1.

La rimozione di una funzione da un hook è quasi la stessa:

remove_action( $nome_gancio, $nome_funzione, $priorità);

Il function_name e $ priorità $ deve corrispondere ai valori originali dalla funzione add_action corrispondente, o non sarà rimosso!

Tipi di gancio

Esistono due tipi principali di hook: hook di azione e hook di filtro . Sono simili sotto molti aspetti: add_action() e la sua controparte add_filter() sono entrambi chiamati allo stesso modo. La differenza sta nella funzione che attraversi:


// Esegui del codice
add_action( 'dove_fare_la_cosa', 'fai_la_cosa' );
funzione fai_la_cosa() {
// Esegui alcune azioni necessarie per fare la cosa
}

// Cambia una variabile
add_filter( 'la_cosa', 'cambia_la_cosa' );
funzione cambia_la_cosa( $cosa ) {
// Filtra $thing e cambia con quello che ti serve, quindi...

restituire $cosa;
}

Si noti che nel secondo esempio, il primo argomento passato al functio n è il valore modificato. Eventuali argomenti aggiuntivi sarebbero solo di utilità e non vengono restituiti tramite l'hook.

Potresti aver notato che ho omesso $priority e $arguments . Questo perché i valori predefiniti vanno bene. Se aiuta, quanto sopra è essenzialmente lo stesso di:


// Esegui del codice
add_action( 'dove_fare_la_cosa', 'fai_la_cosa', 10, 1 );
// Cambia una variabile
add_filter( 'la_cosa', 'cambia_la_cosa', 10, 1 );

Questi sono ovviamente esempi inventati, ma illustrano la differenza principale tra i due: i filtri servono per modificare le variabili, le azioni servono per aggiungere codice.

Esempi meno forzati

Supponiamo che tu voglia che WP invii una notifica via email quando un nuovo utente si registra sul tuo sito. Facendo riferimento al codice WP, trovi l' action hook user_register . Questo ti fornisce una variabile $user_id , che puoi usare per ottenere i dettagli dell'utente. wp_mail() gestisce il resto:


add_action( 'user_register', 'notify_on_user_registration' );
funzione notify_on_user_registration( $user_id ) {

// Ottieni l'utente
$user = get_user_by( 'id', $user_id );

// Prepara l'oggetto e il corpo dell'email
$subject = “Registrazione nuovo utente”;
$message = “Si è registrato un nuovo utente {$user->first_name} {$user->last_name}.”;

// Invia l'e-mail
wp_mail('[email protected]', $oggetto, $messaggio);
}

E se volessi reindirizzare gli utenti alla tua prima pagina all'accesso? Puoi farlo facilmente con l' hook login_redirect , che fornisce l'URL a cui gli utenti vengono reindirizzati per impostazione predefinita:


add_filter( 'login_redirect', 'redirect_user_on_login' );
funzione redirect_user_on_login( $redirect_to ) {
ritorno home_url();
}

Subito dopo averlo aggiunto, ti rendi subito conto che, in qualità di amministratore, vuoi essere indirizzato direttamente alla dashboard di WP anziché alla home page. Non è un problema: basta modificare l'hook in modo che funzioni solo per gli amministratori:


add_filter( 'login_redirect', 'redirect_user_on_login', 10, 3 );
function redirect_user_on_login( $redirect_to, $request, $user ) {
// Modifica l'URL di accesso a meno che l'utente non sia un amministratore
if ( isset( $utente->ruoli ) && is_array( $utente->ruoli ) ) {
if ( in_array( 'amministratore', $utente->ruoli ) ) {
return $redirect_to; // Reindirizza gli amministratori al default (area admin)
}
}

return $redirect_to;
}

Nota che $priority e $arguments sono entrati in gioco!

Poiché è necessario accedere al terzo argomento dell'hook per verificare il livello dell'utente, è necessario visualizzare 3 argomenti; si passa un valore di 3.

Il valore di $priority di 10 è lo stesso del valore predefinito, ovviamente, ma è specificato per raggiungere il valore di $arguments di cui avevi bisogno sopra.

Creare i propri ganci

Il potere di creare ganci personalizzati è nelle tue mani! Le funzioni fornite da WP sono simili a questa:

do_action( $nome_gancio, $arg_1, $arg_2 … $arg_n);

apply_filters( $hook_name, $arg_1, $arg_2 … $arg_n);

Di nuovo, sono un po' simili. Entrambe le funzioni accettano un nome: è qui che assegni il nome all'hook. Tutti i seguenti argomenti sono gli stessi argomenti resi disponibili alle funzioni che aggiungi a quell'hook. apply_filters() deve avere almeno un argomento aggiuntivo (l'argomento che viene filtrato), ma tutti gli altri sono facoltativi.

Ad esempio, se desideri inserire uno script di analisi subito prima del tag del corpo di apertura, ma non vuoi trasformare header.php in un pasticcio:


<?php do_action( 'before_body_tag' ); ?;>
</head>
<corpo>

Quindi puoi aggiungere tutti gli script di cui hai bisogno:


add_action( 'before_body_tag', 'add_analytics_custom' );
function add_analytics_custom() {
// I tag <script> e il codice analitico vanno qui
}

apply_filters() funziona in modo leggermente diverso. Come discusso in precedenza, i filtri vengono utilizzati per modificare i valori. Poiché i filtri restituiscono un valore, assegni la tua chiamata apply_filters() a una variabile:


<?php $text = apply_filters( 'call_to_action_text', 'Chi siamo' ); ?>
<a href="<?php echo get_permalink( 'about' ); ?>” class="pulsante cta">
<?php echo $testo; ?>
</a>

// In alternativa, puoi eseguire l'eco del risultato di apply_filters() direttamente
<a href="<?php echo get_permalink( 'about' ); ?>” class="pulsante cta">
<?php echo apply_filters( 'call_to_action_text', 'Chi siamo' ); ?>
</a>

Quindi puoi modificare la variabile filtrata secondo necessità:


add_filter( 'call_to_action_text', 'change_call_to_action_text' );
funzione change_call_to_action_text( $testo ) {
if ( is_front_page() ) {
$text = 'Scopri di più';
}

restituisce $testo;
}

Gli svantaggi

Nessun sistema è perfetto e i ganci non fanno eccezione. Quando si tratta di core hook, generalmente devi accontentarti di quello che ti viene dato. Molto occasionalmente incontrerai situazioni in cui un gancio non è nel posto più conveniente per te. Non c'è molto da fare quando ciò accade, quindi considerala come un'opportunità per trovare una soluzione creativa!

Inoltre, poiché gli hook possono esistere ovunque all'interno della struttura della directory WP, a volte è difficile trovare dove si verifica una determinata logica. Questo può essere compensato separando i tuoi hook di funzione nei propri file.

Ulteriori consigli

  • Quando si creano funzioni per gli hook, assicurarsi che il nome sia univoco, altrimenti si verificherà un conflitto. Lo stesso vale per il tuo hook personalizzato e i nomi dei filtri!
  • Usa i ganci per mantenere i tuoi modelli ordinati. Alcuni hook generici do_action() inseriti in tutti i modelli possono aiutare a mantenere la logica lontana dal markup (quasi sempre una buona idea).
  • Quando installi un nuovo plugin, controlla quali hook fornisce e pensa a come potresti utilizzarli. Ciò è particolarmente utile per le inevitabili volte in cui un plugin non fa esattamente quello che vuoi.
  • Quando si aggiunge un'azione o un filtro, è possibile sostituire il nome della funzione con la funzione stessa. Questo può aiutare a mantenere le azioni e i filtri autonomi. Le funzioni aggiunte in questo modo non possono essere rimosse usando remove_action() o remove_filter() , quindi fai attenzione!

add_action( 'dove_fare_la_cosa', function() {
echo 'La cosa è fatta.';
}, 10, 1);
  • Dai un'occhiata alle altre funzioni disponibili relative agli hook, come did_action() o has_action() . Non si sa mai quando solo esserne consapevoli sarà utile.

Sommario

Usare i ganci è una questione di abitudine. Prova a porti due semplici domande ogni volta che lavori al tuo progetto WP:

  1. "C'è un gancio che renderà tutto più facile per me?"
  2. "Posso aggiungere un gancio che renderà tutto più facile per me in futuro?"

Una volta che ti avvicini allo sviluppo di WP con questo atteggiamento, troverai molte porte che si aprono.

Gli esempi in questa guida sono la punta dell'iceberg. Ci sono centinaia di hook solo nel core di WP, per non parlare della vasta libreria di plugin e temi. Dai un'occhiata al riferimento all'azione WP e al riferimento al filtro per l'elenco completo dei principali hook WP.


Se hai bisogno di aiuto con il tuo sviluppo web non esitare a contattarci.