WordPress
Funzione: add_action ()
Ricerca…
Sintassi
- add_action ($ tag, $ function_to_add)
- add_action ($ tag, $ function_to_add, $ priority)
- add_action ($ tag, $ function_to_add, $ priority, $ accepted_args)
Parametri
Parametro | Dettagli |
---|---|
$ tag | (stringa) (Obbligatorio) Il nome dell'azione a cui è agganciato $function_to_add |
$ function_to_add | ( callable ) (Obbligatorio) La funzione che deve essere chiamata quando viene eseguita l'azione indicata da $tag |
$ priorità | (int) (Opzionale) Valore predefinito: 10 Utilizzato per specificare l'ordine in cui vengono eseguite le funzioni associate a una determinata azione. I numeri più bassi corrispondono all'esecuzione precedente e le funzioni con la stessa priorità vengono eseguite nell'ordine in cui sono stati aggiunti all'azione. |
$ accepted_args | (int) (Opzionale) Valore predefinito: 1 Il numero di argomenti accettati dalla funzione. |
Osservazioni
La funzione add_action()
crea un hook di azione , associando una funzione PHP a una determinata azione "tag" o nome. Quando l'azione viene "innescata" da una chiamata a do_action()
(o do_action_ref_array()
) con un tag specifico, verranno eseguite tutte le funzioni "agganciate" a quel tag.
Nella maggior parte dei casi, questa funzione dovrebbe essere utilizzata nel file functions.php
un tema o in un file plugin o in un altro file sorgente caricato da entrambi.
Questa funzione è una parte dell'API Plugin
Azione base Hook
L'applicazione di base di add_action()
consiste nell'aggiungere codice personalizzato da eseguire in una determinata posizione in un codice sorgente dell'installazione di WordPress - utilizzando azioni fornite dal Core di WordPress o create da codice di terze parti come plug-in e plug-in temi.
Per aggiungere contenuto alla sezione <head></head>
del sito - dì ad un meta elemento <link>
aggiungi per indicare dove sono reperibili le informazioni sul copyright per il sito - add_action()
può essere usato per allegare una funzione che stampa il markup appropriato per l'azione 'wp_head'
(che "si innesca" quando WordPress crea la sezione <head>
):
function add_copyright_meta_link() {
echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}
add_action( 'wp_head', 'add_copyright_meta_link' );
Azione Hook Priority
Qualsiasi numero di funzioni può essere "agganciato" a qualsiasi azione specifica. In alcuni casi è importante che una funzione agganciata venga eseguita prima o dopo altre, che è il punto in cui entra in gioco il terzo parametro di add_action()
, $priority
.
Se l'argomento $priority
è omesso, la funzione verrà associata con la priorità predefinita di 10
. Quando l'azione è "innescata", le funzioni "agganciate" verranno chiamate a partire da quelle aggiunte con la $priority
più piccola e passando alle funzioni con la $priority
più grande. Tutte le funzioni collegate che condividono la stessa priorità verranno chiamate nell'ordine in cui sono state aggiunte (l'ordine in cui sono state eseguite le rispettive chiamate add_action()
).
Ad esempio, supponiamo che un plug-in di terze parti utilizzi una funzione collegata all'azione 'template_redirect'
per inoltrare i visitatori alla pagina di daily-deal
a un link di affiliazione per un sito di e-commerce esterno, ma desideri il reindirizzamento si verifica solo per gli utenti registrati. Dovresti utilizzare il tuo hook 'template_redirect'
per inviare i visitatori che hanno effettuato il logout alla pagina di accesso. Dopo aver stabilito che il plug-in di terze parti allega la sua funzione con il $piority
predefinito di 10
, puoi agganciare la tua funzione con una priorità di 9
per assicurarti che il tuo check-in di accesso avvenga prima:
function redirect_deal_visitors_to_login() {
if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
wp_redirect( wp_login_url() );
exit();
}
}
add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );
Agganciare i metodi di classe e oggetto alle azioni
Le classi PHP sono un potente strumento per migliorare l'organizzazione del codice e ridurre al minimo le collisioni di denominazione. Ad un certo punto o in un altro, inevitabilmente sorge la domanda su come creare un hook di azione per un metodo di classe.
L'argomento $function_to_add
viene spesso mostrato come una stringa contenente il nome della funzione, tuttavia il tipo di dati dell'argomento è in realtà un " callable ", che per i nostri scopi può essere riassunto come "un riferimento a una funzione o un metodo".
Esistono numerosi formati richiamabili che possono essere utilizzati per fare riferimento a metodi su classi e oggetti. In tutti i casi, tuttavia, il metodo di riferimento deve essere visibile pubblicamente. Un metodo è pubblico quando è prefisso con la parola chiave public
o non ha alcuna parola chiave di visibilità (nel qual caso il metodo è impostato su public).
Oggetto Metodo Azione Ganci
I metodi oggetto vengono eseguiti su una particolare istanza di una classe.
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
Dopo aver istanziato la classe sopra come segue,
$my_class_instance = new My_Class();
il metodo initialize()
sarebbe normalmente invocato sull'oggetto chiamando $my_class_instance->initialize();
. L'aggancio del metodo all'azione WordPress 'init'
viene eseguito passando una matrice contenente un riferimento all'istanza e una stringa contenente il nome del metodo dell'oggetto:
add_action( 'init', [ $my_class_instance, 'initialize' ] );
Se si chiama add_action()
all'interno di un metodo object, è possibile utilizzare anche $this
pseudo-variabili:
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
add_action( 'init', [ $this, 'initialize' ] );
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
Ganci di azione del metodo di classe
I metodi di classe sono eseguiti staticamente su una classe piuttosto che su una particolare istanza. Data la seguente classe,
class My_Class {
// Initialization function
public static function initialize() {
// (Initialization logic)
}
}
il metodo initialize()
verrebbe normalmente richiamato usando l'operatore ::
scope-resolution, cioè My_Class::initialize();
. L'hooking di un metodo statico di classe a un WordPress può essere fatto in un paio di modi diversi:
Utilizzando un array composto da una stringa contenente il nome della classe e una stringa contenente il nome del metodo:
add_action( 'init', [ 'My_Class', 'initialize' ] );
Passando una stringa contenente un riferimento completo al metodo, incluso l'operatore
::
add_action( 'init', 'My_Class::initialize' );
Se
add_action()
viene chiamato all'interno di un metodo di classe statico, al posto del nome della classe può essere utilizzata la parola chiaveself
o la__CLASS__
magia__CLASS__
. Si noti che questo è generalmente sconsigliabile in quanto i valori di questi elementi diventano alquanto controintuitivi nel caso dell'ereditarietà di classe.class My_Class { // Setup function public static function setup_actions() { add_action( 'init', 'self::initialize' ); } // Initialization function public static function initialize() { // (Initialization logic) } }