Agregar función de devolución de llamada para wp_ajax_ no tiene efecto

2

Estaba intentando agregar una función de devolución de llamada más a la acción de WordPress AJAX woocommerce_apply_coupon .

Esta acción se define en el complemento WooCommerce. Quiero agregar mi propia función de devolución de llamada a esta acción desde mi archivo de complemento.

Lo que he intentado:

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

Hacer esto en mi functions.php ni siquiera muestra ningún error, como no puedo ver ningún efecto de este código.

Quiero saber si esto es incluso posible de lograr. Gracias.

    
pregunta codepixlabs 22.08.2013 - 10:53

2 respuestas

4

Sí. ¡Es posible y estás en el camino correcto! :)

Las llamadas AJAX suceden "tras bambalinas" y no se genera ningún resultado de pantalla durante el proceso, sin importar qué echo o print_r , por eso no ves nada que te sea devuelto. - en lugar de eso, la respuesta del servidor es capturada por javascript y actuada allí.

Eso te da dos opciones básicas para depurar tus acciones AJAX:

1) Puedes usar error_log() en tus acciones AJAX para escribir la salida en el archivo WP_DEBUG_LOG y verificar los resultados allí:

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

Para obtener más información, consulte Codex: Debugging_in_WordPress - WP_DEBUG_LOG

Pro-tip # 1: Encienda una consola de terminal y use tail -f debug.log para una transmisión en vivo de la debilidad de depuración;)

Pro-tip # 2: Usa tail -f debug.log | grep -v 'bad-plugin' para filtrar demasiado la debugging awesomness de los autores de complementos que no usan WP_DEBUG_LOG ; P

2) Use el propio console.log() de javascript para verificar la respuesta directamente en su navegador:

Enviar una respuesta de la acción AJAX ...

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

... y recíbelo con JS:

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

Pro-tip # 3: En lugar de simplemente hacer eco de la respuesta como hicimos anteriormente, puede usar wp_send_json () para generar una respuesta con formato JSON o WP_Ajax_Response class for un XML. ¡Práctico para respuestas más complejas y / o manejo de errores!

Pro-tip # 4: Avíseme en los comentarios si algo no está claro: D

¡Bienvenido y diviértete en WPSE!

    
respondido por el Michal Mau 22.08.2013 - 12:39
1

Si algún otro código de controlador se engancha primero y también llama a exit() , el script finaliza, por lo que su código nunca se ejecuta.

Comprueba el otro controlador.

    
respondido por el Otto 24.08.2013 - 14:31

Lea otras preguntas en las etiquetas