使用网址中的$ GET参数创建新的重定向网址(Wordpress)

时间:2016-10-17 12:58:20

标签: php wordpress redirect

我在Wordpress中使用自定义登录页面,并在functions.php中安装了一个脚本,该脚本重定向到自定义“错误登录”页面(向登录URL添加参数),因此它可以显示错误相同的页面而不是本机登录页面。

但在某些情况下,当尝试访问私人页面后有人被重定向时,此登录页面已包含一些参数。

例如:

  • 常规案例:他们尝试访问:website.com/login。如果尝试登录时出错,我的脚本会重定向到website.com/login?login=empty,他们可以再试一次。

  • 有问题的案例:他们尝试访问website.com/protected-page/private,他们会自动重定向到website.com/login?members=%2Fprotected-page%2Fprivate%2。如果在尝试登录时出错,我的脚本实际上会重定向到website.com/login?login=empty(与常规案例相同),而我正在尝试实现的目标是重定向到website.com/login?成员=%2Fprotected-page%2Fprivate%2& login = empty,当发生错误时。

在URL中保留此“?members”参数允许表单在成功登录之后重定向到之前尝试访问的上一页。否则,在常规情况下,它们将被重定向到常规仪表板。

在出现错误时实际管理重定向的脚本:

add_action('authenticate','check_username_password',1,3); function check_username_password($ login,$ username,$ password){

$referrer = $_SERVER['HTTP_REFERER'];

if( !empty( $referrer ) && !strstr( $referrer,'wp-login' ) && !strstr( $referrer,'wp-admin' ) ) { 
if( $username == "" || $password == "" ){
    wp_redirect( get_permalink( 20 ) . "?login=empty" );
    exit;
}
}

因此,重要的部分是创建错误网址:

wp_redirect( get_permalink( ID ) . "?login=empty" );

我可以使用“$ _GET [”members“]”获取我的其他UTL参数,如果我执行“echo $ _GET [”wlfrom“];”它在页面中成功显示参数。但即使它看起来如此简单,我也无法将此参数添加到URL中。到目前为止我尝试了什么:

#1. wp_redirect( get_permalink( ID ) . "?members=" . $_GET["members"] . "?login=empty" );
#2. wp_redirect( get_permalink( ID ) . "?members=" . echo $_GET["members"] . "?login=empty" );
#3. $param = array('members');
wp_redirect( get_permalink( ID ) . "?members=" . $param . "?login=empty" );
//This one returns website.com/?members=array/?login=empty
#4.$param = $_SERVER["PHP_SELF"];
wp_redirect( $param . "?login=empty" );
// This one I cannot use because it displays the native login URL, not my permalink, that's why I need to use "get_permalink" for the first part of the URL

还有各种其他解决方案。我是新手,所以我找不到基于前一个创建这个新URL的其他解决方案,我不确定是否也可以使用GET。

为了使用当前网址中的参数,我应该填写“wp_redirect”?

谢谢!

1 个答案:

答案 0 :(得分:0)

在您的wordpress自定义登录表单中添加隐藏字段

<input type="hidden" name="members" value="<?php echo @$_REQUEST['members']; ?>">

并更改这些

wp_redirect( get_permalink( ID ) . "?login=empty" );

<?php
$queryarg='?login=empty';
if(isset($_REQUEST['members']) && $_REQUEST['members']!=''){
    $queryarg .='&members='$_REQUEST['members'];
}
wp_redirect( get_permalink( ID ) . $queryarg );

?>