Diferença entre do_action e add_action

18

Esta pergunta pode estar errada, não tenho certeza sobre isso. Porque eu não estou claro sobre isso.

Eu sei que add_action é usado para ligar nossa função à função especificada. Por exemplo, add_action('wp_head'.'myfunc'); agora, o que já codificou em myfunc será executado no wp_head() . Isso está claro, mas estou tendo dúvidas em do_action do que ele faz?

Eu acho que é usado para criar o nosso próprio gancho como ganchos já disponíveis (wp_head, wp_footer, etc.) Se eu estiver correto, alguém pode me mostrar uma resposta simples e compreensível com um exemplo simples.

Eu tentei a diferença na internet, mas todos estão apontando para a diferença entre add_action e add_filter. Eu não quero ir lá porque primeiro eu quero esclarecer isso e então eu irei para lá.

Alguém pode me ajudar?

EDITAR depois da pergunta POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Eu tentei isso no plug-in, mas não recebi a mensagem de alerta.

Mas quando eu ligar a mesma função com wp_head , então está funcionando bem

/******************working****************/
add_action('wp_head','custom_register');
    
por sun 28.10.2013 / 11:35

4 respostas

10

Use do_action( 'unique_name' ) para criar suas próprias ações.

Você pode usar isso para oferecer uma API para o seu plug-in , para que outros plugins possam registrar retornos de chamada para o seu personalizado açao. Exemplo: Preciso ligar para o do_action no meu plugin?

Mas você também pode usar ações personalizadas (ou filtros) em um tema. Exemplo: Melhor maneira prática de implementar seções personalizadas em um tema WordPress

E você pode combinar ambos para tornar um plug-in e um tema trabalhando juntos. Exemplo: Como tornar o método do plugin disponível no tema?

Resumo: add_action( 'foo' ) registra um retorno de chamada, do_action( 'foo' ) executa o retorno de chamada registrado.

    
por fuxia 28.10.2013 / 11:42
1

Este é o meu palpite, por isso, se souber melhor, por favor faça um comentário para que eu possa atualizar o meu palpite.

Seu código de plugin é executado antes de wp_head() (o qual podemos assumir que invocará as ações adicionadas a ele). Quando você add_action('wp_head','custom_register') , você está dizendo ao PHP que quando (no futuro) do_action('wp_head') é chamado, chamar custom_register() também. O mesmo acontece com sua chamada para add_action('custom','custom_register') , mas como você vê no seu código, a chamada para do_action('custom') já foi feita e, quando foi chamada, não havia (ainda) nenhuma ação adicionada a ela. É por isso que Toscho perguntou o que acontece quando você chama do_action('custom') após registrar o retorno de chamada. Sua resposta sobre back end e front end é ambígua. Se você trocar as duas últimas linhas no código a seguir, acho que funcionará:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
    
por Dave Scotese 14.02.2016 / 20:23
0

do_action : registra um gancho de ação enquanto add_action : adiciona uma função de retorno de chamada ao gancho registrado.

Exemplo

Considere que você queria imprimir algo antes da barra lateral no seu modelo.

  1. Você adicionará um gancho de ação ao arquivo de modelo index.php via <?php add_action('bp_sidebar_left'); ?> .
  2. Agora, no seu arquivo functions.php , você pode adicionar uma função de retorno de chamada a esse gancho para imprimir algo que deseja.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

    
por Aamer Shahzad 19.04.2018 / 08:10
-1

Você tem que usar como abaixo:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect
    
por user112289 01.02.2017 / 17:15

Tags