Como funcionam as acções e as acções adicionais?
estou a tentar descobrir o que funciona exactamente o do_action e o add_action. Eu já examino com add_action mas para do_action eu estou tentando como novo agora. Foi isto que eu tentei.
function mainplugin_test() {
$regularprice = 50;
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
// and doing further
//like i echoing the regular price
echo $regularprice; //It print 100 from this code
}
Agora, em vez de colocar alguns códigos no arquivo principal, estou planejando criar do_ action para evitar problemas de código.
function mainplugin_test() {
$regularprice = 50;
do_action('testinghook');
// and doing further
//like i echoing the regular price
echo $regularprice; //It should print 100 but it print 50
}
Então eu criei outra função para apontar esse gancho como algo como
function anothertest() {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
add_action('testinghook','anothertest');
não sabes como adicionar as linhas de código a esse gancho que a função acima pode funcionar? Como por i tentei no meu ambiente de testes. nada ajuda. Se eu entender que a ação correta é mais como incluir um arquivo??? Se não, por favor, aconselhe-me.
Obrigado.4 answers
A razão pela qual não imprimiu {[[1]}, Porque $regularprice
dentro da função anothertest()
é local para essa função. A variável $regularprice
usada na função parent mainplugin_test()
não é a mesma que a variável usada na função anothertest()
, estão em âmbito separado.
Então você precisa definir o $regularprice
em um escopo global (o que não é uma boa idéia) ou você pode passar argumento como um parâmetro para do_action_ref_array
. O do_action_ref_array
é o mesmo que do_action
em vez disso, aceita o segundo parâmetro como array de parametro.
Passando por argumento:
function mainplugin_test() {
$regularprice = 50;
// passing as argument as reference
do_action_ref_array('testinghook', array(&$regularprice));
echo $regularprice; //It should print 100
}
// passing variable by reference
function anothertest(&$regularprice) {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
// remain same
add_action('testinghook','anothertest');
do_action
cria um gancho de Acção, add_action
executa funções ligadas quando esse gancho é chamado.
Por exemplo, se adicionar o seguinte no rodapé do seu tema:
do_action( 'my_footer_hook' );
Você pode ecoar o conteúdo nesse local a partir de funções.PHP ou um plugin personalizado:
add_action( 'my_footer_hook', 'my_footer_echo' );
function my_footer_echo(){
echo 'hello world';
}
Você também pode passar variáveis para um gancho:
do_action( 'my_footer_hook', home_url( '/' ) );
Que pode usar na função de callback:
add_action( 'my_footer_hook', 'my_footer_echo', 10, 1 );
function my_footer_echo( $url ){
echo "The home url is $url";
}
No seu caso, deve estar a tentar filtrar o valor com base numa condição. Isso é o que os ganchos dos filtros são para:
function mainplugin_test() {
echo apply_filters( 'my_price_filter', 50 );
}
add_filter( 'my_price_filter', 'modify_price', 10, 1 );
function modify_price( $value ) {
if( class_exists( 'rs_dynamic' ) )
$value = 100;
return $value;
}
Referência
Na verdade, o add_action
é um gancho de acção que é usado para invocar uma acção (um manipulador registado) num determinado ponto, dependendo da acção e o do_action
é usado para invocar manualmente essa acção registada. Por exemplo:
add_action('some_hook', 'handler_for_some_hook');
Este manipulador será invocado quando você tomar ou o programa fizer o some_action
, mas se quiser poderá invocar essa acção manualmente usando o do_action
. Então, basicamente o do_action
invoca o gancho de Acção registado quando lhe chamas. Verifique mais sobre Codex .
/ / com do_action criamos o próprio tag (gancho) uso no wordpress Ex. Aqui adicionei uma função personalizada para chamar isto Em add_action adicionei o nome da função com qualquer nome de marca personalizado Com o do_action (o meu nome personalizado Da Marca)
function mywork()
{
echo "display my name";
}
add_action('mytag','mywork');
do_action('mytag');
- - - add_action()---
Gancho específico que irá afectar a função ()
add_action( hook, **function**() )
Ele vai mudar a funcionalidade e o comportamento do wordpress por "gancho" específico, podemos mudá-lo e método de funções.