WordPress
Azioni e filtri
Ricerca…
Sintassi
- add_action (tag, function_to_call, priority, num_of_args);
- add_filter (tag, function_to_call, priority, num_of_args);
Parametri
Parametro | Spiegazione |
---|---|
$ tag | (stringa) (Obbligatorio) Il nome dell'azione a cui è agganciata la funzione $. |
$ funzione | (callable) (Obbligatorio) Richiede una stringa contenente il nome della funzione o la funzione anonima. Vedi esempi per aggiungere funzioni all'interno delle classi. |
$ priorità | (int) default = 10. Le funzioni associate a ganci / filtri verranno eseguite nella priorità assegnata. Si può avere una situazione in cui si desidera lavorare con il codice prima di qualsiasi altra azione, impostare priorità = 1 o dopo tutte le altre funzioni associate priorità = 100 ecc. Come con tutte le funzioni php, è possibile utilizzare la funzione senza passare un valore per una variabile dove è stato impostato un valore predefinito, ma se si desidera modificare il numero di parametri restituiti, è necessario specificare! |
$ parametri | (int) default = 1. Il numero di parametri restituiti alla funzione allegata. I parametri restituiti dipenderanno dal numero in cui è stato creato l'hook. Vedi apply_filters() e do_action() per maggiori dettagli. |
Osservazioni
Ganci Wordpress
Qualcosa che spesso confonde gli sviluppatori quando si inizia a lavorare con WordPress sono l'uso di apply_filters()
e add_action()
. Vedrai spesso plugin / temi che fanno uso di questi in codice e se non capisci il concetto, troverai difficile lavorare con loro.
In breve (molto breve, guarda il diagramma di flusso di WordPress per il processo in dettaglio), WordPress si carica nel seguente modo:
- wp-load.php - funzioni ecc
- mu-plugins - qualsiasi file trovato nella cartella mu-plugins - spesso usato per servire oggetti memorizzati nella cache
- Plugin: nessun ordine particolare, verranno caricati plugin installati e attivati
- Tema figlio attivo / tema principale
- init - resto dei dati
- modello
Se sei uno sviluppatore e lavori con un file di funzioni, puoi vedere che entrambi sono caricati in precedenza nel processo rispetto ai file con cui stai lavorando. Ciò significa che non è possibile modificare i processi (si noti che non è possibile sovrascrivere le funzioni) o le variabili eseguite successivamente o non ancora definite. Inoltre, gli sviluppatori di temi possono inserire degli hook nel loro codice per consentire ai plugin di collegarsi o i plug-in potrebbero consentire ad altri plug-in di sovrascrivere le loro variabili. Ora questo può essere fonte di confusione finora, ma resisti lì.
Per capire add_filter()
e add_action()
abbiamo bisogno di vedere come vengono creati gli hook in primo luogo.
$arga= 'hello';
do_action('im_a_hook', $arga );
Quando si incontra quanto sopra in WordPress, chiamerà qualsiasi funzione collegata im_a_hook
(cercare $wp_filter
per informazioni sul processo). Nella tua funzione allegata $arga
sarà disponibile per la funzione allegata su cui lavorare.
add_action('im_a_hook', 'attached_function');
function attached_function($arga){
echo $arga;
}
Questo apre nuove e potenti opportunità per modificare le variabili in determinati punti del processo di caricamento. Ricorda che abbiamo detto prima che i modelli sono caricati dopo plugin / temi? Un plugin comune è WooCommerce che crea schermate più avanti nel processo, non ho intenzione di documentare come ma un esempio di do_action
può essere trovato nel plugin.
do_action( 'woocommerce_after_add_to_cart_button' );
Qui abbiamo creato un hook che non restituisce alcuna variabile, ma possiamo ancora divertirci con esso:
add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');
function special_offer(){
echo '<h1>Special Offer!</h1>;
}
L' add_action
sopra di cui sopra farà echo
un'intestazione dell'offerta speciale in cui si trova do_action('woocommerce_after_add_to_cart_button')
si trova quando si crea una schermata di WooCommerce. Quindi possiamo usare questo hook per inserire html. Altri usi potrebbero includere il reindirizzamento a uno schermo diverso del tutto, ecc.
Anche più variabili possono essere passate alla funzione. Prova questo nelle funzioni dei tuoi temi. Nota l'ultimo parametro che stiamo impostando su 3, perché vogliamo lavorare con i 3 parametri disponibili. Se lo avessimo modificato in 2, solo 2 verrebbero restituiti e avremmo ottenuto un errore indefinito.
add_action('custom_hook', 'attached_function', 10, 3);
function attached_function($a,$b,$c){
var_dump($a);
var_dump($b);
var_dump($c);
}
$arga = 1;
$argb = 2;
$argc = 3;
do_action('custom_hook', $arga, $argb, $argc);
exit;
C'è un altro tipo di hook WP chiamato un filtro. Un filtro è diverso da un'azione nel suo utilizzo, un'azione può ricevere solo variabili, ovviamente queste variabili rientrano nello scope delle funzioni (dovresti sapere quale scope php è, se non google). I filtri restituiscono i dati restituiti, quindi è possibile utilizzare per modificare le variabili.
$filter_me= apply_filters('im_a_filter', $variable_to_filter);
Dove vedi quanto sopra, puoi modificare il valore di $filter_me
dato che qualsiasi dato che tu restituisci sarà il valore memorizzato nella variabile. Quindi per esempio (nota che stiamo cambiando $variable_to_filter
in $filter_me
nell'esempio):
add_filter('im_a_filter', 'attached_function', 100);
function attached_function($filter_me){
$filter_me= 'ray';
return $filter_me;
}
$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);
La variabile $filter_me
ora conterrà 'ray' piuttosto che 'bob' , abbiamo impostato una priorità di 100 quindi siamo ragionevolmente sicuri che nessuno stia cambiando il valore dopo l'uso (ci possono essere più filtri in esecuzione sullo stesso hook) Quindi ora è possibile modificare le variabili utilizzate successivamente nel processo se è presente apply_filters()
.
Puoi anche passare più parametri, ma puoi solo cambiare il valore di uno. Devi anche restituire un valore, altrimenti la tua variabile non conterrà nulla. Se capisci come usi php per assegnare valori / array / oggetti a variabili questo ti sarà ovvio, ad esempio:
add_filter('im_a_filter', 'attached_function', 100, 3);
function attached_function($filter_me, $arga, $argb){
$filter_me= 'ray'.$arga.$argb;
$arga= 'you fool';
return $filter_me;
}
$filter_me = 'bob';
$arga = ' middlename';
$argb = ' surname';
$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);
La variabile $filter_me
ora contiene 'ray middlename surname' . Ma per quanto riguarda $arga
? Questo contiene ancora 'middlename' , cambiando un $arga
in 'you fool' all'interno della nostra funzione non ha alcun effetto sul valore definito al di fuori del suo ambito (ci sono modi, google globals ecc.)
add_action ($ hook_name, $ function, $ priority, $ parameters)
add_filter ($ hook_name, $ function, $ priority, $ parameters);
add_action - init
add_action('init', 'process_post');
function process_post(){
if($_POST)
var_dump($_POST);
}
add_action - init - funzione anonima
add_action('init' , function(){
echo 'i did something';
});
add_action - init - all'interno dell'oggetto di classe
class sample{
public function __construct(){
add_action('init', array($this, 'samp') );
}
public function samp(){ // must be public!!
echo 'i did something';
}
}
new sample();
add_action - init - all'interno della classe statica
class sample{
public static function add_action_func(){
//note __CLASS__ will also include any namespacing
add_action('init', array(__CLASS__, 'samp') );
}
public static function samp(){
echo 'i did something';
}
}
sample::add_action_func();