だから私は管理領域の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();
}
これは単なるテストコードですが、文字列 "attivato"の代わりに常に0を返します。それはまた404エラーなしで、正しいAjax URLを見つけます。
何が問題ですか?
これも追加してください:add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
。 nopriv
に注目してください。
それはあなたの問題を解決します!
私は同じ問題を抱えていました。溶液:
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');
両方(noprivの有無にかかわらず)を追加しない場合は、サインインモードまたはサインアウトモードでのみ機能します。 noprivはサインアウト用、もう1つはサインイン用です。
これがあなたの問題であるかどうかわからないが、私はちょうど "0"の応答を得ていたので、それを把握するのに最長の時間がかかった。あなたのphp関数の最後にexit
またはdie
を入れるようにすることとは別に、あなたはあなたのプラグインのトップレベルにあなたのadd_action('wp_ajax_...
ビットを置かなければならないことがわかりました。 admin_menu
フックの中に入れ子にしましたが、うまくいきませんでした。上記のコードがトップレベルのプラグインphpファイルの関数内のインクルードの一部であるかどうかはわかりません(私のように)。