La richiesta admin ajax con die() restituisce 0
Sto utilizzando questa configurazione per una chiamata AJAX nell'area amministrativa (come questo):
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();
}
È solo un codice di test, ma restituisce sempre 0 invece della stringa "attivato". Trova correttamente l'URL ajax, senza errore 404.
Qual è il problema?
Ho risolto assicurandomi che il suffisso di "wp_ajax_SUFFIX" corrispondesse all'azione, in modo che l'azione nel post jQuery fosse anch'essa "SUFFIX". Tuttavia, non ho avuto bisogno di usare nopriv... Non sono sicuro che questa sia la soluzione al problema dell'op, dato che si tratta di un'azione che avviene nella pagina di amministrazione, il che significa praticamente che sei loggato, suggerendo che non hai bisogno di registrare un gestore nopriv...

Ho avuto lo stesso problema. Soluzione:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');
Se non aggiungi entrambi (con e senza nopriv) funzionerà solo in modalità con accesso effettuato o solo in modalità senza accesso. nopriv è per gli utenti non autenticati, l'altro è per gli utenti autenticati.

Non sono sicuro che questo sia il tuo problema, ma io ricevevo solo una risposta "0" e ci ho messo tantissimo tempo a capire il motivo. Oltre ad assicurarti di mettere exit
o die
alla fine della tua funzione PHP, ho scoperto che devi posizionare il tuo add_action('wp_ajax_...
al livello principale del tuo plugin. Io l'avevo annidato all'interno del mio hook admin_menu
, cosa che non funzionava. Non so se il tuo codice sopra fa parte di un include all'interno di una funzione dal tuo file PHP principale del plugin (come era nel mio caso).
