Ich verwende diese Konfiguration also für einen AJAX-Aufruf im Verwaltungsbereich ( wie folgt ):
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 ist nur ein Testcode, aber er gibt immer 0 anstelle der Zeichenfolge "attivato" zurück. Es findet auch die Ajax-URL korrekt, ohne einen 404-Fehler.
Worin besteht das Problem?
wp_ajax_my_action
Teils "my_action" muss mit der im jQuery-Beitrag verwendeten Aktion übereinstimmen. Ich sehe, dass deine übereinstimmen, also ist das in deinem Fall nicht das Problem. Ich habe es auch auf der Admin-Seite, was Sie versuchen zu tun. Sind Sie angemeldet, wenn Sie versuchen, diesen Ajax-Anruf zu tätigen? Oder bist du abgemeldet?Antworten:
Fügen Sie dies ebenfalls hinzu :
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
. Beachten Sie dienopriv
.Es wird Ihr Problem lösen!
quelle
Ich hatte das gleiche Problem. Lösung:
Wenn Sie nicht beide hinzufügen (mit und ohne nopriv), funktioniert dies entweder im Anmeldemodus oder nur im Abmeldemodus. nopriv ist für abgemeldet, der andere ist für abgemeldet.
quelle
Ich bin mir nicht sicher, ob dies Ihr Problem ist, aber ich erhielt eine Antwort von nur "0" und es dauerte am längsten, bis ich es herausgefunden hatte. Abgesehen davon, dass Sie sicherstellen, dass Sie
exit
oderdie
am Ende Ihrer PHP-Funktion stehen, habe ich herausgefunden, dass Sie Ihradd_action('wp_ajax_...
Bit auf der obersten Ebene Ihres Plugins platzieren müssen. Ich hatte es in meinemadmin_menu
Haken verschachtelt , was nicht funktionierte. Ich bin mir nicht sicher, ob Ihr Code oben Teil eines Includes in einer Funktion aus Ihrer Top-Level-Plugin-PHP-Datei ist (wie meine).quelle