Así que estoy usando esta configuración para una llamada AJAX en el área administrativa ( como esta ):
add_action( 'admin_head', 'ajaxPerNgg' );
function ajaxPerNgg(){ ?>
<script type="text/javascript" >
jQuery(document).ready(function() {
jQuery("#message").remove();
jQuery("#errore a#attivo").click(
function(){
var data = {
action: 'my_action'
};
jQuery.post(ajaxurl, data, function(response) {
if(response == "attivato")
jQuery("#errore a#inattivo").attr("id","completato").html("Attivato");
else
jQuery("#errore a#inattivo").attr("id","attivo").html("Attivalo ora");
});
}
);
});
</script>
<?php }
add_action('wp_ajax_my_action', 'my_action_callback');
function my_action_callback() {
echo 'attivato';
die();
}
Es solo un código de prueba, pero siempre devuelve 0 en lugar de la cadena "attivato". También encuentra la url ajax correctamente, sin un error 404.
¿Cuál es el problema?
wp_ajax_my_action
Resolví mi problema, el sufijo de la parte "my_action" debe coincidir con la acción utilizada en la publicación jQuery. Veo que el tuyo coincide, así que ese no es el problema en tu caso. También lo tengo funcionando desde la página de administración, que es lo que estás tratando de hacer. ¿Estás conectado cuando intentas hacer esta llamada ajax? ¿O estás desconectado?Respuestas:
Añadir esta así:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
. Note elnopriv
.¡Resolverá tu problema!
fuente
Yo tuve el mismo problema. Solución:
Si no agrega ambos (con y sin nopriv), funcionará en el modo de inicio de sesión o solo en el modo cerrado. nopriv es para cerrar sesión, el otro es para iniciar sesión.
fuente
No estoy seguro si este es su problema, pero recibí una respuesta de solo "0" y me tomó más tiempo resolverlo. Además de asegurarte de poner
exit
odie
al final de tu función php, descubrí que tienes que poner tuadd_action('wp_ajax_...
bit en el nivel superior de tu complemento. Lo tenía anidado dentro de miadmin_menu
anzuelo, que no funcionó. No estoy seguro de si su código anterior es parte de una inclusión dentro de una función de su archivo php del complemento de nivel superior (como lo fue el mío).fuente