Cererea admin ajax returnează 0 cu die()
Deci folosesc această configurație pentru un apel AJAX în zona administrativă (ca aici):
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("Activat");
else
jQuery("#errore a#inattivo").attr("id","attivo").html("Activează acum");
});
}
);
});
</script>
<?php }
add_action('wp_ajax_my_action', 'my_action_callback');
function my_action_callback() {
echo 'attivato';
die();
}
Este doar un cod de test, dar întotdeauna returnează 0 în loc de șirul "attivato". De asemenea, găsește corect URL-ul ajax, fără o eroare 404.
Care este problema?
Am rezolvat această problemă asigurându-mă că sufixul "wp_ajax_SUFFIX" se potrivește cu acțiunea, astfel încât acțiunea în post-ul jQuery să fie tot "SUFFIX". Cu toate acestea, nu a fost nevoie să folosesc nopriv... Nu sunt sigur dacă acesta este răspunsul la problema op-ului, deoarece aceasta este o acțiune care are loc pe pagina de administrare, ceea ce înseamnă practic că ești autentificat, sugerând că nu ai nevoie să înregistrezi un handler nopriv...

Am avut aceeași problemă. Soluție:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');
Dacă nu adaugi ambele (cu și fără nopriv) va funcționa doar în modul autentificat sau doar în modul neautentificat. nopriv este pentru utilizatorii neautentificați, iar celălalt este pentru cei autentificați.

Nu sunt sigur dacă aceasta este problema ta, dar eu primeam doar răspunsul "0" și mi-a luat mult timp să-mi dau seama. Pe lângă faptul că trebuie să pui exit
sau die
la sfârșitul funcției PHP, am aflat că trebuie să plasezi add_action('wp_ajax_...
la nivelul superior al pluginului tău. Eu l-am plasat înăuntrul hook-ului meu admin_menu
, ceea ce nu a funcționat. Nu sunt sigur dacă codul tău de mai sus face parte dintr-un fișier inclus în interiorul unei funcții din fișierul principal al pluginului (cum era în cazul meu).
