Tak więc używam tej konfiguracji do wywołania AJAX w obszarze administracyjnym ( jak poniżej ):
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();
}
To tylko kod testowy, ale zawsze zwraca 0 zamiast ciągu „attivato”. Znajduje również poprawnie adres URL ajax, bez błędu 404.
Jaki jest problem?
wp_ajax_my_action
„moja aktywność” musi pasować do akcji użytej w poście jQuery. Widzę, że twój pasuje, więc to nie jest problem w twoim przypadku. Mam go również działający ze strony administratora, co właśnie próbujesz zrobić. Czy jesteś zalogowany, gdy próbujesz wykonać to wywołanie ajax? Czy jesteś wylogowany?Odpowiedzi:
Dodaj to także:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
. Zwróć uwagę nanopriv
.Rozwiąże twój problem!
źródło
Miałem ten sam problem. Rozwiązanie:
Jeśli nie dodasz obu (z nopriv i bez), będzie działać tylko w trybie zalogowania lub wylogowania. nopriv jest zalogowany, drugi zalogowany.
źródło
Nie jestem pewien, czy to jest twój problem, ale dostałem odpowiedź tylko „0” i zajęło mi to najdłuższy czas, aby to zrozumieć. Oprócz upewnienia się, że umieściłeś
exit
lubdie
na końcu swojej funkcji php, odkryłem, że musisz umieścić swójadd_action('wp_ajax_...
bit na najwyższym poziomie swojej wtyczki. Miałem to zagnieżdżone wadmin_menu
haku, co nie działało. Nie jestem pewien, czy powyższy kod jest częścią dołączenia do funkcji z pliku php wtyczki najwyższego poziomu (tak jak mój).źródło