Żądanie administratora admin zwraca 0 za pomocą die ()

10

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?

Ivano Mercuri
źródło
Czy kiedykolwiek odkryłeś ten problem? Jeśli tak, czy możesz skomentować (lub zaakceptować) odpowiedź, która rozwiązała problem? Jeśli żadne z nich nie rozwiązało problemu i nie zostało rozwiązane , czy możesz dodać odpowiedź poniżej? Dziękuję Ci!
jmort253
@ jmort253 cześć, przepraszam, że teraz odpowiadam, ale w tej chwili nadal mam ten problem i nie znalazłem rozwiązania w Internecie: „(Pracuję nad tym, gdy mam trochę wolnego czasu; jeśli znajdę rozwiązanie , napiszę tutaj;)
Ivano Mercuri,
Ok, u mnie tak samo. Jeśli to wymyślę, opublikuję. :) Pozostajemy w kontakcie.
jmort253
1
Rozwiązałem problem, sufiks części 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?
jmort253
Dobrze. Nie zauważyłem tego! ;)
Rutwick Gangurde,

Odpowiedzi:

21

Dodaj to także: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Zwróć uwagę na nopriv.

Rozwiąże twój problem!

Rutwick Gangurde
źródło
2
Naprawiłem to, upewniając się, że przyrostek „wp_ajax_SUFFIX” pasuje do akcji, tak aby akcja w poście jQuery była również „SUFFIX”. Jednak nie musiałem używać nopriv ... Nie jestem pewien, czy to jest odpowiedź na problem operacyjny, ponieważ jest to akcja, która ma miejsce na stronie administratora, co właściwie oznacza, że ​​jesteś zalogowany, co sugeruje nie trzeba rejestrować modułu obsługi nopriv ...
jmort253
15

Miałem ten sam problem. Rozwiązanie:

add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');

Jeśli nie dodasz obu (z nopriv i bez), będzie działać tylko w trybie zalogowania lub wylogowania. nopriv jest zalogowany, drugi zalogowany.

Paweł
źródło
4

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ś exitlub diena końcu swojej funkcji php, odkryłem, że musisz umieścić swój add_action('wp_ajax_...bit na najwyższym poziomie swojej wtyczki. Miałem to zagnieżdżone w admin_menuhaku, 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).

Jeff
źródło
1
Ten sam problem tutaj. Nie jestem pewien, jak rozwiązać ten problem, ponieważ czasami musimy umieścić odpowiedź ajax wewnątrz lub na końcu części kodów.
Ari