Quante volte posso agganciarmi alla stessa azione?

10 gen 2011, 23:33:20
Visualizzazioni: 16.4K
Voti: 11

Ho un tema che include alcune configurazioni utilizzando after_setup_theme, ma vorrei scrivere le mie funzioni che devono essere eseguite anch'esse con after_setup_theme. Preferirei mantenere il mio codice in un file separato. Posso chiamare after_setup_theme più volte?

0
Tutte le risposte alla domanda 3
0
34

Gli hook di WordPress funzionano come Hollywood: non sei tu a chiamarli, sono loro a chiamare te. Ma a differenza di Hollywood, continuano a chiamare tutti quelli presenti nella lista.

È normale che un'azione o un filtro abbia più funzioni collegate, provenienti da plugin diversi, o anche solo diverse funzioni nel core di WordPress che fanno tutte qualcosa di specifico. Non solo è possibile, ma è anche una buona pratica, perché significa che il tuo codice diventa più chiaro (ogni funzione fa solo una cosa) ed è più semplice disabilitare un pezzo specifico di funzionalità scollegandolo.

Ricorda che puoi anche giocare con le priorità degli hook: se vuoi eseguire sia functionA() che functionB() in after_setup_theme, ma functionA() deve essere eseguita prima di functionB(), puoi collegare functionA() con la priorità predefinita 10 e functionB() con priorità 20 (o qualsiasi altro numero superiore a 10). Ciò che non funzionerà è collegare un'altra funzione a un'azione mentre quell'azione è in esecuzione. Quindi non puoi collegare functionB() a after_setup_theme da functionA(), chiamata su after_setup_theme. Potresti chiamarla direttamente, ma perderesti il vantaggio degli hook separati.

11 gen 2011 10:03:40
0

Il mio suggerimento sarebbe di avere una funzione "master", se vuoi, che richiama tutte le altre funzioni. In questo modo devi agganciarti a quell'azione solo una volta.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Fai qualcosa */}
function func_b(){ /* Fai qualcosa */}
function func_c(){ /* Fai qualcosa */}
function func_d(){ /* Fai qualcosa */}
function func_e(){ /* Fai qualcosa */}

Questo ha il vantaggio aggiuntivo di poter restituire valori che puoi utilizzare nelle chiamate successive alle funzioni.

26 apr 2012 15:29:47
0

Sì, puoi aggiungere tutte le azioni che desideri all'hook. Prova pure.

11 gen 2011 02:27:01