ajax - WordPress 插件 ajax 由于 admin_init 钩子(Hook)而无法工作

标签 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 处理程序位于同一个文件中,如上所述。

我不知道为什么会发生这种情况。有什么帮助吗?

最佳答案

我有类似的症状,你可能也有同样的问题。就我而言,问题源于我创建了特殊角色。当具有该角色的用户尝试进入 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' );

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

关于ajax - WordPress 插件 ajax 由于 admin_init 钩子(Hook)而无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864480/

相关文章:

javascript - 如何在重新加载的页面中显示为 ajax 响应

css - 滚动后移动导航菜单卡在屏幕顶部

jquery - 使 Bootstrap 下拉按钮级联

javascript - Angular UI-Router 动态路由基于来自 API Ajax 调用的 slug。基于 slug 加载 View

javascript - 在 WordPress 中停止基于 Flash 的游戏的滚动

php - WooCommerce 产品 SKU 检查不起作用

PHP MySQL数据库没有创建新表

php - 如何使用 AFNetworking 2.0 检查 Wordpress 登录信息?

Javascript:在 onbeforeunload 上抑制 "This page is asking you to confirm that you want to leave"弹出窗口

javascript - 使用 jQuery 确定相对路径