add_action (), add_filter () prima o dopo la funzione


18

Quando guardo i frammenti / tutorial / plug-in di WordPress che vedo spesso add_action()e add_filter()sono collocati prima che venga dichiarata la funzione:

add_action( 'publish_post', 'email_friends' );

function email_friends( $post_ID ) {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

Da un punto di vista logico, questo non ha senso per me. Perché dovresti inserire la funzione dopo che è stata chiamata nel tuo codice? Di solito è così che gestisco la stessa situazione:

function email_friends( $post_ID )  {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

add_action( 'publish_post', 'email_friends' );

So che entrambi gli scenari funzionano, ma esiste un vantaggio specifico per l'uno o l'altro? Circa il 90% delle volte vedo che viene utilizzato il primo scenario, quindi questo mi porta a credere che ci sia un vantaggio in qualche modo.

Risposte:


13

E 'più facile da leggere: Quando è ciò che chiama? Se stai eseguendo il debug di un hook, puoi immediatamente vedere se devi leggere la funzione o meno: se non è il tuo hook, puoi saltare il codice.

Nei miei temi e plugin combino tutte le registrazioni per azioni, filtri e codici brevi nella parte superiore e aggiungo il gancio al blocco PHPDoc:

add_action( 'wp_head',  'foo' );
add_action( 'shutdown', 'bar' );

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}

2
Anche se non sono d'accordo (solo a causa delle mie preferenze personali e delle pratiche di codifica precedenti) che è più facile da leggere questo ha senso il perché sia ​​fatto in questo modo.
voodooGQ,

6

In realtà non esiste una vera differenza, ad esempio preferisco seguire il primo scenario, perché è più ordinato effettuare chiamate in un posto e definire funzioni al di sotto di questo. PHP analizza l'intero documento prima di eseguire qualsiasi cosa e, se le funzioni sono definite correttamente, tutto funzionerà normalmente, senza alcun vantaggio in nessuno degli scenari.

Credo che il detto giusto qui sia: qualunque cosa galleggi la tua barca :)


Non funziona perché PHP analizza l'intero documento, ma perché call_user_func_array()(molto probabilmente) viene chiamato dopo la definizione della funzione durante l'esecuzione do_action. Quindi puoi definire la funzione di hook ovunque fino a quel punto.
kovshenin,

1

4 anni dopo, ma sono sicuro che aiuterà le persone ad arrivare qui dalla ricerca.

Come altri hanno affermato, non c'è differenza poiché php analizza l'intero documento ed esegue nell'ordine corretto. Quindi, qualunque cosa ti piaccia.

Personalmente mi piace il primo stile:

add_action(hook, bar);
function bar(){
    //code here
}

Tendo a pensare al contrario. Se vuoi, orientato agli obiettivi. Quindi mi piace leggere, "stiamo facendo la barra delle funzioni, agganciato. Okay, ora, cosa fa la funzione?"

Imposta meglio il contesto per la funzione. Naturalmente questa è solo la mia preferenza personale. Quindi fai quello che ti piace.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.