Поэтому я использую эту конфигурацию для вызова AJAX в административной области ( например, так ):
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();
}
Это просто тестовый код, но он всегда возвращает 0 вместо строки «attivato». Он также находит URL-адрес ajax правильно, без ошибки 404.
В чем проблема?
wp_ajax_my_action
"my_action" должен соответствовать действию, используемому в посте jQuery. Я вижу, что ваш совпадает, так что это не проблема в вашем случае. У меня также это работает со страницы администратора, что вы пытаетесь сделать. Вы вошли в систему при попытке сделать этот вызов ajax? Или вы вышли из системы?Ответы:
Добавьте это так:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
. Обратите вниманиеnopriv
.Это решит вашу проблему!
источник
У меня такая же проблема. Решение:
Если вы не добавите оба (с nopriv и без него), он будет работать либо в режиме входа, либо в режиме выхода. nopriv для выхода, другой для входа.
источник
Не уверен, что это ваша проблема, но я получил ответ «0», и мне потребовалось самое большое время, чтобы понять это. Кроме того, чтобы убедиться, что вы поставили
exit
илиdie
в конце своей функции PHP, я обнаружил, что вы должны поставить свойadd_action('wp_ajax_...
бит на верхнем уровне вашего плагина. У меня это было вложено в мойadmin_menu
крючок, который не работал. Я не уверен, является ли ваш код выше частью включения внутри функции из вашего php-файла плагина верхнего уровня (как у меня было).источник