J'essayais d'ajouter une fonction de rappel supplémentaire à l'action WordPress AJAX _ woocommerce_apply_coupon
.
Cette action est définie dans le plugin WooCommerce. Je souhaite ajouter ma propre fonction de rappel à cette action à partir de mon fichier de plugin.
Ce que j'ai essayé
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;
}
Faire cela dans mon functions.php
ne montre même pas d'erreur, car je ne vois aucun effet de ce code.
Je veux savoir si c'est même possible à réaliser. Je vous remercie.
Oui. C'est possible et vous êtes sur la bonne voie! :)
Les appels AJAX ont lieu "dans les coulisses" et aucune sortie d'écran n'est générée pendant le processus, peu importe ce que vous echo
ou print_r
- c'est pourquoi vous ne voyez rien revenir à vous - cette réponse du serveur est capturée par javascript et y est traitée.
Cela vous donne deux options de base pour le débogage de vos actions AJAX:
1) Vous pouvez utiliser error_log()
dans vos actions AJAX pour écrire le résultat dans le fichier WP_DEBUG_LOG
et vérifier les résultats à cet endroit:
function darn(){
error_log( print_r($_POST, 1) );
exit;
}
Pour plus de détails, voir Codex: Debugging_in_WordPress - WP_DEBUG_LOG
Astuce n ° 1: Lancez une console de terminal et utilisez tail -f debug.log
pour un flux en direct de débogage awesomness;)
Astuce n ° 2: utilisez tail -f debug.log | grep -v 'bad-plugin'
pour filtrer trop de problèmes de débogage des auteurs de plugins qui n'utilisent pas WP_DEBUG_LOG
; P
2) Utilisez la fonction console.log()
de javascript pour vérifier la réponse directement dans votre navigateur:
Envoyer une réponse à partir de l'action AJAX ...
function darn(){
echo 'darn!'
exit;
}
... et recevez-le avec JS:
$.post(ajaxurl, data, function(response) {
// Response will be 'darn!'
if( typeof(console) == 'object' ) console.log( response );
});
Astuce n ° 3: au lieu de simplement répercuter la réponse comme ci-dessus, vous pouvez utiliser wp_send_json () pour générer une réponse au format JSON ou WP_Ajax_Response pour une classe XML. Pratique pour les réponses plus complexes et/ou le traitement des erreurs!
Astuce n ° 4: Faites-moi savoir dans les commentaires si quelque chose reste incertain: D
Bienvenue et passez un bon moment sur WPSE!
Si un autre code de gestionnaire est connecté en premier et qu'il appelle également exit()
, le script se termine et le code ne s'exécute jamais.
Vérifiez l'autre gestionnaire.