Então, eu estou usando essa configuração para uma chamada AJAX na área administrativa ( assim ):
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();
}
É apenas um código de teste, mas sempre retorna 0 em vez da string "attivato". Ele também encontra o URL do ajax corretamente, sem um erro 404.
Qual é o problema?
wp_ajax_my_action
Resolvi meu problema, o sufixo da parte "my_action" deve corresponder à ação usada no post do jQuery. Vejo que o seu corresponde, então esse não é o problema no seu caso. Também o tenho trabalhando na página de administração, que é o que você está tentando fazer. Você está conectado ao tentar fazer esta chamada ajax? Ou você está desconectado?Respostas:
Adicione esta assim:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
. Observe onopriv
.Isso resolverá o seu problema!
fonte
Eu tive o mesmo problema. Solução:
Se você não adicionar ambos (com e sem nopriv), ele funcionará apenas no modo conectado ou no modo desconectado. nopriv está desconectado, o outro está conectado.
fonte
Não tenho certeza se esse é o seu problema, mas eu estava recebendo uma resposta de apenas "0" e demorei mais tempo para descobrir isso. Além de garantir que você coloque
exit
oudie
no final da sua função php, descobri que você precisa colocar suaadd_action('wp_ajax_...
parte no nível superior do seu plugin. Eu o aninhei dentro do meuadmin_menu
gancho, o que não funcionou. Não tenho certeza se o seu código acima faz parte de uma inclusão dentro de uma função do seu arquivo php do plugin de nível superior (como o meu).fonte