add_action (), add_filter () avant ou après la fonction

18

Lorsque je regarde des extraits / tutoriels / plugins WordPress, je vois add_action()et je suis souvent add_filter()placé avant que la fonction ne soit déclarée:

add_action( 'publish_post', 'email_friends' );

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

D'un point de vue logique, cela n'a tout simplement pas de sens pour moi. Pourquoi placeriez-vous la fonction après son appel dans votre code? C'est généralement ainsi que je gérerais la même situation:

function email_friends( $post_ID )  {
   $friends = '[email protected], [email protected]';
   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' );

Je sais que les deux scénarios fonctionnent, mais y a-t-il un avantage spécifique pour l'un ou l'autre? Environ 90% du temps, je vois le premier scénario utilisé, ce qui m'amène à croire qu'il y a un avantage à cela d'une manière ou d'une autre.

voodooGQ
la source

Réponses:

13

C'est plus facile à lire: quand s'appelle comment ? Si vous déboguez un hook, vous pouvez immédiatement voir si vous devez lire la fonction ou non: Si ce n'est pas votre hook, vous pouvez ignorer le code.

Dans mes thèmes et plugins, je combine toutes les inscriptions pour les actions, les filtres et les shortcodes en haut et j'ajoute le hook au bloc PHPDoc:

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

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}
fuxia
la source
2
Bien que je ne sois pas d'accord (juste à cause de mes préférences personnelles et des pratiques de codage passées) que sa lecture plus facile ait un sens pour expliquer pourquoi cela est fait de cette manière.
voodooGQ
6

Il n'y a pas vraiment de différence en fait, je préfère par exemple suivre le premier scénario, car il est plus pratique de passer des appels en un seul endroit et de définir des fonctions en dessous. PHP analyse tout le document avant d'exécuter quoi que ce soit, et si les fonctions sont correctement définies, tout fonctionnera normalement, aucun avantage dans les deux scénarios.

Je crois que le bon dicton ici est: tout ce qui fait flotter votre bateau :)

OriginalEXE
la source
Cela ne fonctionne pas parce que PHP analyse tout le document, mais parce qu'il call_user_func_array()est (très probablement) appelé après la définition de votre fonction lors de l'exécution do_action. Vous pouvez donc définir la fonction accrochée n'importe où jusqu'à ce point.
kovshenin
1

4 ans plus tard, mais je suis sûr que cela aidera les gens à venir de la recherche.

Comme d'autres l'ont dit, il n'y a pas de différence car php analyse tout le document et s'exécute dans le bon ordre. Alors, tout ce que vous aimez.

J'aime personnellement le premier style:

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

J'ai tendance à penser à l'envers. Orienté objectif si vous voulez. Donc j'aime lire: "nous faisons la barre de fonction, en crochet. D'accord, maintenant, que fait la fonction?"

Il définit mieux le contexte de la fonction. Bien sûr, c'est juste ma préférence personnelle. Alors fais ce que tu aimes.

John_911
la source