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.

Author: diggy, 2014-11-06

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');
 4
Author: Rahil Wazir, 2014-11-06 15:03:06

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

 18
Author: diggy, 2014-11-06 14:57:36

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 .

 2
Author: The Alpha, 2014-11-06 14:38:57

/ / 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.

 0
Author: Dhruv, 2018-03-23 12:42:32