WordPress插件AJAX 400错误:is_admin()导致wp_ajax钩子失效问题
问题原因解析
首先得搞懂WordPress里is_admin()的真实作用——它不是判断当前用户是不是管理员,而是判断当前执行的代码是否处于wp-admin后台页面的上下文里。
你前台页面里var_dump出is_admin()是false,这很正常,因为前台页面本身不属于wp-admin后台范畴。但你忽略了一个关键点:WordPress的所有AJAX请求(不管是前台还是后台发起的),最终都是走wp-admin/admin-ajax.php这个文件。当请求到这个文件时,is_admin()会返回true,因为这个文件属于后台文件体系。
那你把wp_ajax_mvp_reel_get_comments钩子放在is_admin()的else分支里,意味着只有当is_admin()为false(也就是前台页面加载时)才注册这个钩子。但当AJAX请求发过来时,执行的是admin-ajax.php,此时is_admin()是true,钩子根本没被注册,WordPress找不到对应的处理函数,自然就返回400错误了。
移出is_admin()判断后,钩子在所有场景下都会被注册,当AJAX请求过来时,处理函数已经存在,功能就正常了。
另外补充:如果要区分前台和后台的AJAX请求,应该用wp_ajax_xxx(登录用户通用)和wp_ajax_nopriv_xxx(未登录用户)这两个钩子,而不是靠is_admin()来判断。
内容的提问来源于stack exchange,提问作者Toniq
相关产品推荐
相关产品推荐

