Diferença entre do_action e add_action

20

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

Eu sei add_actionque é usado para conectar nossa função à função especificada. Por exemplo, add_action('wp_head'.'myfunc');agora, qualquer código myfuncque será executado no wp_head(). Isso está claro, mas estou com dúvidas no do_actionque faz?

Eu acho que é usado para criar nosso próprio gancho como ganchos já disponíveis (wp_head, wp_footer, etc. 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. Não quero ir para lá porque primeiro quero esclarecer isso e depois vou para lá.

Alguém pode me ajudar?

EDIT após a 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 plugin, mas não recebi a mensagem de alerta.

Mas quando eu conecto a mesma função wp_head, ela está funcionando bem

/******************working****************/
add_action('wp_head','custom_register');
Dom
fonte
O que acontece quando você liga do_action('custom'); depois de registrar o retorno de chamada? E verifique se o jQuery está carregado.
fuxia
eu não recebi a mensagem de alerta no back-end ou no front-end
dom
jQuery são carregados. Quando eu ligar a mesma função com wp_headele está funcionando bem, mas não com ocustom
sol
Sun, acredito que sua pergunta original foi respondida por toscho e você deve marcar isso como resolvido. As edições 3 e 4 que você fez pertencem a uma nova pergunta .
Brasofilo 30/10

Respostas:

13

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 plug-ins possam registrar retornos de chamada para sua ação personalizada. Exemplo: Preciso chamar do_action no meu plugin?

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

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

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

fuxia
fonte
Obrigado pela ajuda que recebi, principalmente para fins de API. Tentei uma amostra, mas não deu certo. Você pode encontrar algum problema? Confira meu EDIT @toscho
dom
Podemos dizer isso como outro caso como herança? em vez de estender e substituir a classe, estamos indo por esse caminho. Isso está correto?
sol
@ sun Hm, sim, mas você pode combinar as duas abordagens , elas não são mutuamente exclusivas.
fuxia
1

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

Seu código de plug-in é executado antes wp_head()(o que 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')for chamado, também será chamado custom_register(). O mesmo se aplica à 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ê liga do_action('custom') depois de 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.
Dave Scotese
fonte
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ê deseja imprimir algo antes da barra lateral no seu modelo.

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

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

Aamer Shahzad
fonte
-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
user112289
fonte
Ele está funcionando para mim #
11121 user112289