5

ajax と wordpress を使用する (適切に実行しようとしている)。それは私にとってはかなり新しいものですが、以前はこれをより巧妙に機能させていました。一見ランダムに問題が発生し始めたので、コードを最も基本的なレベルに分解しましたが、それを機能させることさえできません!!! いらいらしているような気がして、単純な間違いを見逃すことを余儀なくされています. これに問題はありますか?

私のjQuery:

$.post(
    ajaxurl, // http://localhost/mysite/wp-admin/admin-ajax.php
    {action: "post-save"},
    function(response){
      alert(response);
    }
);

私のPHP:

function update_post(){
    echo json_encode(array("success" => "all systems go"), JSON_FORCE_OBJECT ); 
    exit;
}
add_action( 'wp_ajax_post-save', 'update_post' );

最終結果はアラートが機能することです。つまり、$.post が成功したことを意味します (そうですか?) が、返された変数responseは私のホームページの html ソースです...

4

2 に答える 2

3

私はそれを考え出した...

これは、同じ間違いをする私のような初心者を助けるかもしれないので、私自身の質問に答えます:)

ログインしていなかったことが判明しました。しかし、反応は奇妙で、ホームページ全体に戻って、私をうんざりさせるのに役立ちました. この理由は、次のように Ajax レスポンダーを含む関数ファイルをブロックしたためです。

function block_users()
{
    if( !current_user_can( 'delete_pages' ) ) {  
        wp_redirect( get_home_url(), 301 );
        exit;
    }
}
add_action('admin_init','block_users');

私はログインすることを知っていたはずです(私はそう思っていました)が、そのような予期しない結果とそれは金曜日でした:)

また、これに遭遇した人には注意してください。ログインせずに誰かに ajax を実行させたい場合は、wp_ajax の非特権バージョンである wp_ajax_nopriv を使用してください。

add_action( 'wp_ajax_nopriv_action', 'function' );

代わりに

add_action( 'wp_ajax_action', 'function' );

前者は ajax リクエストを実行するために許可、つまりログインを必要としません。

于 2013-04-01T18:02:53.383 に答える
2

私は同じ問題を抱えていましたが、解決策は DOING_AJAX を関数に追加することでした

function block_users()
{
    if( !current_user_can( 'delete_pages' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
        wp_redirect( get_home_url(), 301 );
        exit;
    }
}
add_action('admin_init','block_users');
于 2015-02-11T09:15:19.757 に答える