我可以授权用户,但不能将他们重定向到成员页面


I can authorize users but cant redirect them to member page

我为我的插件设计了一个登录页面,它可以完美地工作并检查用户凭据,但当用户获得授权时,我无法移动到px_member234.php页面。

第一个页面是px_myplugin34.php,然后它使用用于身份验证的include(px_login234.php)打开px_login234.php文件,我想这就是为什么头不起作用的原因。还有其他选择吗?

<form method="post" action="">
    ....
 </form>
 authorizer(){
  ........
  if(user_is_authorized)
    {
       //go to member.php page
       header ("Location:px_member234.php");  << does not work
    }
 }

我也使用了以下,但它不工作

  echo '<script type="text/javascript">window.top.location="px_member234.php";</script>'; 
  echo '<script type="text/javascript">window.location="px_member234.php";</script>'; 

这是因为您在头之前回显HTML内容。

当PHP看到实际输出时,它必须将所有输出头刷新到apache(apache将它们发送到客户端)。在PHP发送了头并开始输出之后,不可能添加更多的头。

在所有上输出任何内容之前,需要重构代码以调用header('Location: ...')

您可以使用标头重定向。要使用它,您必须确保在header命令之前没有输出任何内容。如果标头已经发送,则此代码将无法在中工作

header("Location:member.php");

在您的示例中,身份验证代码必须位于页面的顶部。如果您不能在头函数调用之前阻止输出,那么您仍然可以向html页面添加一个元重定向头,或者使用JavaScript设置一个新的window.location

除了像页面上提到的其他函数一样在任何输出之前调用header()函数外,还应该在Location:和URL之间留一个空格。

您所拥有的:

header("Location:member.php");

什么会起作用:

header("Location: member.php");


更新

根据HTTP/1.1头字段定义,尝试包含完整的URI,而不是相对的URI。

来自php.net:

HTTP/1.1需要一个绝对URI作为»Location的参数:包括方案、主机名和绝对路径,但有些客户端接受相对URI。您通常可以使用$_SERVER['HTTP_HOST']$_SERVER['PHP_SELF']dirname()自己从相对URI中生成绝对URI。

您可以在表单标记中添加

<form method="post" action="?noheader=true">.  

?noheader=true将阻止Wordpress输出任何标头。您可以在此处查看详细信息:http://www.lessthanweb.com/blog/wordpress-and-wp_redirect-function-problem

此外,在wordpress开发中,wp_redirect比php头函数更受欢迎,因为它包含钩子,可以很好地与其他插件配合使用。

请注意,它采用您想要重定向用户的绝对url。既然你正在制作一个插件,你可以使用get_option("siteurl")来获取根url,所以:

<?php 
     wp_redirect(get_option('siteurl').'px_member234.php');
     exit;
?>