wake-up-neo.com

Wie funktionieren do_action und add_action?

Ich versuche herauszufinden, was genau do_action und add_action funktioniert. Ich prüfe bereits mit add_action, aber für do_action versuche ich jetzt wie neu. Das habe ich versucht.

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

}

Anstatt ein paar Codes in die Hauptdatei zu schreiben, plane ich do_action zu erstellen, um Probleme mit Code-Chaos zu vermeiden. 

    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

    }

also habe ich eine weitere Funktion erstellt, die diesen Haken als etwas ähnelt

function anothertest() {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
add_action('testinghook','anothertest');

Sie sind sich nicht sicher, wie Sie dem Hook die Codezeilen hinzufügen können, die über der Funktion funktionieren könnten? Wie ich es in meiner Testumgebung probiert habe, hilft nichts. Wenn ich verstehe, dass do_action eher eine Datei einschließt ??? Wenn nicht, bitte beraten Sie mich.

Vielen Dank.

12

Der Grund, warum 100 nicht gedruckt wurde, weil $regularprice in anothertest() function lokal für diese Funktion ist. Die Variable $regularprice, die in der übergeordneten mainplugin_test()-Funktion verwendet wird, stimmt nicht mit der in anothertest()-Funktion verwendeten Variable überein.

Sie müssen also entweder den $regularprice in einem globalen Bereich definieren (was keine gute Idee ist), oder Sie können Argumente als Parameter an do_action_ref_array übergeben. Der do_action_ref_array ist derselbe wie do_action, stattdessen akzeptiert er einen zweiten Parameter als Array von Parametern.

Als Argument übergeben:

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
Rahil Wazir

do_action erstellt einen Aktions-Hook, add_action führt die Hook-Funktionen aus, wenn dieser Hook aufgerufen wird.

Wenn Sie beispielsweise Folgendes in die Fußzeile Ihres Themes einfügen:

do_action( 'my_footer_hook' );

Sie können den Inhalt an diesem Speicherort über die Datei functions.php oder ein benutzerdefiniertes Plugin wiedergeben:

add_action( 'my_footer_hook', 'my_footer_echo' );
function my_footer_echo(){
    echo 'hello world';
}

Sie können auch Variablen an einen Hook übergeben:

do_action( 'my_footer_hook', home_url( '/' ) );

Welche können Sie in der Rückruffunktion verwenden:

add_action( 'my_footer_hook', 'my_footer_echo', 10, 1 );
function my_footer_echo( $url ){
    echo "The home url is $url";
}

In Ihrem Fall versuchen Sie wahrscheinlich, den Wert anhand einer Bedingung zu filtern. Dafür gibt es Filterhaken:

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

Referenz

22
diggy

Tatsächlich ist add_action ein Aktions-Hook, der dazu verwendet wird, eine Aktion (einen registrierten Handler) an einem bestimmten Punkt abhängig von der Aktion aufzurufen, und do_action wird verwendet, um diese registrierte Aktion manuell aufzurufen. Zum Beispiel:

add_action('some_hook', 'handler_for_some_hook');

Dieser Handler wird aufgerufen, wenn Sie den Code some_action übernehmen oder das Skript dies ausführt. Wenn Sie möchten, können Sie diese Aktion jedoch manuell mit dem Code do_action aufrufen. Im Grunde ruft der do_action beim Aufruf den registrierten Aktions-Hook auf. Überprüfen Sie mehr auf Codex .

2
The Alpha

// Mit do_action erstellen wir ein eigenes Tag (Hook), das in WordPress verwendet wird Hier habe ich eine benutzerdefinierte Funktion hinzugefügt, um das aufzurufen. In add_action fügte ich den Funktionsnamen mit einem beliebigen benutzerdefinierten Tag-Namen hinzu.

function mywork()
{
    echo "display my name";
}

add_action('mytag','mywork');

do_action('mytag');

--- add_action () ---

hook-spezifischer Hook, der von function () beeinflusst wird

 add_action( hook, **function**() )

Es wird die Funktionalität und das Verhalten von WordPress durch bestimmte "Haken" ändern. Wir können es und die Funktionsmethode ändern.

0
Dhruv