为什么admin-ajax.php会重定向到注销用户的主页?

时间:2012-12-08 作者:David Faux

我正在我的网站上使用wp polls插件。此插件依赖于使用表单的AJAX请求http://www.myfakewebsiteurl.com/wp-admin/admin-ajax.php?action=polls&view=process&poll_id=2&poll_2=8&poll_2_nonce=420d75e659

当我登录时,这个请求工作正常:它从服务器中提取轮询结果,然后将它们显示在所需的网页上。

但是,当我注销时,此请求会将我重定向到主页。因此,我没有显示投票结果,而是将主页加载到应该显示投票结果的地方。

为什么要管理ajax。php将未登录到我的网站主页的访问者重定向到我的Wordpress支持的网站?

3 个回复
最合适的回答,由SO网友:shea 整理而成

它仅在直接访问时重定向,位于wp-admin/. 无论身份验证状态如何,AJAX请求都应正常工作。

Edit: wp-admin/admin-ajax.php 在任何情况下都不应重定向。可能是插件将所有未经身份验证的用户重定向到主页?默认情况下,未登录时访问wp admin/中的文件应重定向到登录页面。

SO网友:Sebastian Thulin

好吧,就这样吧。重定向插件必须执行以下操作以避免此问题。

if ( !defined( \'DOING_AJAX\' ) ) {}
就这么简单。简单的错误,易于修复。

SO网友:Chaoste

我只是有同样的问题,对我来说,原因不是插件代码被破坏。为了找到这个,我确实需要在中调试wp\\u重定向代码wp-includes/pluggable.php:1246 并在函数开头添加以下行:

  var_dump($location);
  var_dump($status);
  var_dump(wp_debug_backtrace_summary());
  die;
通常,您可以通过如下过滤器注入此类代码wp_redirect 但这对我来说不起作用,因为错误发生在WordPress加载我的主题或插件代码之前。现在,我在浏览器的开发人员网络工具中观察了AJAX请求的响应主体。您也可以使用trigger_error(wp_debug_backtrace_summary()) 并观察stacktracewp-content/debug.log (如果启用调试日志)。

我的问题是在我的主题中命名一个文件admin.php 并将其导入include_once("admin.php");. 奇怪的是,需求逻辑开始在上层父文件夹s中查找具有该名称的文件,因此,它加载了wp-admin/admin.php 导致身份验证错误,最终导致错误重定向。

下面是我的特殊问题的解决方案:

// Instead of: include_once(\'admin.php\');
include_once(dirname(__FILE__) . \'admin.php\');
我想,有很多方法可以产生这种重定向问题。希望我的解决问题的方法能帮助其他人解决问题。

你好,托马斯

结束

相关推荐

在我的AJAX提交上触发一个传统函数

我正在为我的家人开发一个小型社区风格的网站。它主要是社交网络的一个小版本,这样我的侄女和侄子就可以互相取乐了。我已经设置了“freinding”功能,它工作得很好。但是,当我响应朋友的请求时,会触发一个额外的ajax函数。我的AJAX功能可以工作并更新数据库,但无法发送电子邮件通知,我认为这是由于启动了额外的AJAX功能。提交响应(接受或忽略)后,FireBug显示我的AJAX函数已临时移动-我看到一个302临时移动错误。就在它下面的另一个GET请求为我登录的用户触发。FireBug中的标题如下所示:Ca