web-dev-qa-db-fra.com

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

Lorsque je cherche des extraits/tutoriels/plugins dans WordPress, je vois souvent que add_action() et add_filter() sont placés 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 aucun sens pour moi. Pourquoi voudriez-vous placer la fonction après qu'elle soit appelée dans votre code? C'est généralement comme cela 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 à l'un ou à l'autre? Environ 90% du temps, je vois le premier scénario utilisé, alors cela me porte à croire que cela présente un avantage.

16
voodooGQ

Il est plus facile de lire: Quand est comment appelé? Si vous déboguez un hook, vous pouvez immédiatement voir si vous devez lire la fonction ou non: s'il ne s'agit pas de votre hook, vous pouvez ignorer le code.

Dans mes thèmes et plugins, je combine tous les enregistrements 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 -->';
}
11
fuxia

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 préférable de passer des appels à un endroit et de définir des fonctions plus basses. PHP analyse l'ensemble du document avant d'exécuter quoi que ce soit, et si les fonctions sont correctement définies, tout fonctionnera normalement, sans aucun avantage.

Je crois que le bon mot est le suivant: tout ce qui flotte dans votre bateau :)

6
OriginalEXE

4 ans plus tard, mais je suis sûr que cela aidera les gens à venir chercher ici.

Comme d'autres l'ont déjà dit, il n'y a pas de différence puisque php analyse l'ensemble du document et s'exécute dans le bon ordre. Alors comme tu veux.

Personnellement, j'aime bien le premier style:

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

J'ai tendance à penser en arrière. Orienté objectif si vous voulez. Donc, j'aime lire: "nous faisons la barre de fonction, en crochet. Ok cool, maintenant, qu'est-ce que la fonction fait?"

Cela permet de mieux définir le contexte de la fonction. Bien sûr, ce n’est que ma préférence personnelle. Alors fais ce que tu aimes.

1
John_911