由于admin_init挂钩,WordPress插件ajax无法正常工作

时间:2013-05-31 19:26:23

标签: ajax wordpress

我在网站前端的js:

中发出ajax请求
jQuery.post( ajaxurl, {
                 action: 'test',
                 method: 'magic'
             },
             function(response){});

发送请求。在其回复中,我看到了当前页面(html)的全部内容,但它应该只是okerror

经过一些测试我明白了,注册的ajax动作从未被解雇过:

add_action('wp_ajax_test', 'test_ajax');
function test_ajax(){
    // during ajax I'm not here
    die('test');
}

请求由登录用户完成,因此不需要wp_ajax_nopriv。

我已打开admin-ajax.php文件并尝试调试它。一切都很好(我看到我要发送的帖子请求),直到我到达第41行(WP 3.5.1):

do_action( 'admin_init' );

在此行之后,代码不会被执行。

在WordPress管理区域,同样的插件也会发送一些ajax请求 - 而且它们有效。那些ajax处理程序在同一个文件中,如上所述。

我不知道为什么会这样。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我有类似的症状,你可能会遇到同样的问题。就我而言,问题源于我创造了特殊角色。当具有该角色的用户尝试进入WP-Admin时,我添加了一个阻止用户访问的脚本。

这是导致错误的ajax调用和响应的脚本。防止用户的正确方法是这样做;

function redirect_non_admin_user() {
    if ( ! current_user_can( 'manage_options' ) && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
        wp_redirect( site_url() );
        exit;
    }
}
add_action( 'admin_init', 'redirect_non_admin_user' );

这解决了我的问题,也可以解决你的问题......希望有所帮助