it-swarm.com.de

Das Hinzufügen einer Rückruffunktion für wp_ajax_ hat keine Auswirkung

Ich habe versucht, eine weitere Rückruffunktion zum WordPress AJAX action woocommerce_apply_coupon hinzuzufügen.

Diese Aktion ist im WooCommerce-Plugin definiert. Ich möchte dieser Aktion meine eigene Rückruffunktion aus meiner Plugin-Datei hinzufügen.

Was ich ausprobiert habe:

add_action( 'wp_ajax_nopriv_woocommerce_apply_coupon','darn',999);
add_action( 'wp_ajax_woocommerce_apply_coupon', 'darn',999);

function darn(){
         print_r($_REQUEST);
         exit;
    }

Wenn ich dies in meinem functions.php tue, wird nicht einmal ein Fehler angezeigt, da ich keinen Effekt dieses Codes sehe.

Ich möchte wissen, ob dies überhaupt möglich ist. Vielen Dank.

2
codepixlabs

Ja. Es ist möglich und Sie sind auf dem richtigen Weg! :)

AJAX-Aufrufe erfolgen "hinter den Kulissen" und während des Vorgangs wird keine Bildschirmausgabe generiert, unabhängig davon, ob Sie echo oder print_r - aus diesem Grund wird Ihnen nichts zurückgegeben - Diese Serverantwort wird von Javascript erfasst und dort bearbeitet.

Damit haben Sie zwei grundlegende Optionen zum Debuggen Ihrer AJAX -Aktionen:

1) Sie können error_log() in Ihren AJAX Aktionen verwenden, um die Ausgabe in die WP_DEBUG_LOG Datei zu schreiben und die Ergebnisse dort zu überprüfen:

function darn(){
     error_log( print_r($_POST, 1) );
     exit;
}

Weitere Details finden Sie unter Codex: Debugging_in_WordPress - WP_DEBUG_LOG

Tipp Nr. 1: Starten Sie eine Terminalkonsole und verwenden Sie tail -f debug.log für einen Live-Stream mit Debugging;)

Pro-Tipp 2: Verwenden Sie tail -f debug.log | grep -v 'bad-plugin', um zu viel Debugging-Awesomness von Plugin-Autoren herauszufiltern, die WP_DEBUG_LOG nicht verwenden. P

2) Verwenden Sie die JavaScript-eigene Funktion console.log(), um die richtige Antwort in Ihrem Browser zu überprüfen:

Senden Sie eine Antwort von der Aktion AJAX ...

function darn(){
    echo 'darn!'
    exit;
}

... und erhalte es mit JS:

$.post(ajaxurl, data, function(response) {
    // Response will be 'darn!'
    if( typeof(console) == 'object' ) console.log( response );
});

Pro-Tipp 3: Anstatt einfach die Antwort wie oben zu wiederholen, können Sie wp_send_json () verwenden. zum Generieren einer JSON-formatierten Antwort oder WP_Ajax_Response -Klasse für eine XML. Praktisch für komplexere Antworten und/oder Fehlerbehandlung!

Pro-Tipp 4: Lassen Sie mich in Kommentaren wissen, wenn etwas unklar bleibt: D

Willkommen und viel Spaß auf WPSE!

4
Michal Mau

Wenn ein anderer Handler-Code zuerst verknüpft wird und auch exit() aufruft, wird das Skript beendet, sodass Ihr Code niemals ausgeführt wird.

Überprüfen Sie den anderen Handler.

1
Otto