【问题标题】:WordPress Plugin ajax doesn't work because of admin_init hook由于 admin_init 钩子,WordPress 插件 ajax 不起作用
【发布时间】:2013-05-27 16:47:36
【问题描述】:

我在网站前端用 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 处理程序位于同一个文件中。

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

【问题讨论】:

  • 发现问题 - 难以理解 init 和 bp_init 操作。进行了一些代码重构 - 现在它可以正常工作了。

标签: ajax wordpress


【解决方案1】:

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

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

【讨论】:

  • 正如我在问题下的评论中所写 - 我发现问题出在哪里 - 挂钩触发顺序。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多