função add_action (), add_filter () antes ou depois da função

18

Ao examinar os snippets / tutoriais / plugins do WordPress, muitas vezes vejo add_action()e estou add_filter()sendo colocado antes da declaração da função:

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;
}

Do ponto de vista lógico, isso simplesmente não faz sentido para mim. Por que você colocaria a função depois que ela é chamada no seu código? Geralmente é assim que eu lidaria com a mesma situação:

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' );

Sei que os dois cenários funcionam, mas há uma vantagem específica para um ou outro? Aproximadamente 90% do tempo, vejo o primeiro cenário sendo usado, o que me leva a acreditar que há um benefício nisso de alguma forma.

voodooGQ
fonte

Respostas:

13

É mais fácil ler: quando é que é chamado? Se você estiver depurando um gancho, poderá ver imediatamente se precisa ler a função ou não: Se não é o seu gancho, pode pular o código.

Nos meus temas e plugins, eu combino todos os registros de ações, filtros e códigos de acesso na parte superior e adiciono o gancho ao bloco PHPDoc:

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

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}
fuxia
fonte
2
Embora eu não concorde (apenas por causa de minhas preferências pessoais e práticas anteriores de codificação) de que é mais fácil ler isso, faz sentido porque é feito dessa maneira.
VoodooGQ
6

Na verdade, não há diferença real; por exemplo, prefiro seguir o primeiro cenário, porque é mais fácil fazer chamadas em um só lugar e definir funções abaixo disso. O PHP analisa todo o documento antes de executar qualquer coisa e, se as funções estiverem definidas corretamente, tudo funcionará normalmente, sem vantagem em nenhum dos cenários.

Eu acredito que o ditado certo aqui é: O que quer que seja o seu barco :)

OriginalEXE
fonte
Funciona não porque o PHP analisa o documento inteiro, mas porque call_user_func_array()é (provavelmente) chamado após a definição da sua função durante a execução do_action. Assim, você pode definir a função conectada em qualquer lugar até esse ponto.
Kovshenin
1

Quatro anos depois, mas tenho certeza de que ajudará as pessoas a chegarem aqui da pesquisa.

Como outros já declararam, não há diferença, pois o php analisa todo o documento e é executado na ordem correta. Então, o que você quiser.

Eu pessoalmente gosto do primeiro estilo:

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

Eu costumo pensar para trás. Objetivo orientado se você quiser. Então, eu gosto de ler: "estamos fazendo barra de funções, no gancho. Ok, legal, agora, o que a função faz?"

Ele define o contexto para a função melhor. Claro que essa é apenas minha preferência pessoal. Então faça o que quiser.

John_911
fonte