使用URL中的$GET参数重定向到URL(WordPress)

时间:2016-10-17 作者:Jimmy Gibs

我使用的是一个自定义登录页面,在函数中有一个脚本。重定向到自定义“错误登录”页面(向登录URL添加参数)的php,因此它可以在同一页面而不是本地登录页面中显示错误。

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

例如:

正常情况:他们试图访问:网站。com/登录。如果尝试登录时出错,我的脚本将重定向到网站。com/登录?登录=空,他们可以重试。

问题案例:他们试图访问网站。com/受保护页/专用,它们会自动重定向到网站。com/登录?成员=%2Fprotected页%2Fprivate%2。如果尝试登录时出错,我的脚本实际上会重定向到网站。com/登录?login=空(与常规情况相同),我试图实现的是重定向到网站。com/登录?成员=%2Fprotected page%2Fprivate%2(&P);登录=出现错误时为空。

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

错误时实际管理重定向的脚本如下:

添加\\u操作(\'验证\',\'检查\\u用户名\\u密码\',1,3);函数check\\u username\\u 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;
}
}
因此,这里创建错误URL的重要部分是:

wp_redirect( get_permalink( ID ) . "?login=empty" );
我可以使用“$\\u get[”members“]”获取其他UTL参数,如果我执行“echo$\\u get[”wlfrom“]”它在页面中成功显示参数。但即使看起来很简单,我也无法将此参数添加到URL。I\'v迄今为止的尝试:

#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
最近,我尝试了这个听起来像是迄今为止最好的解决方案:

登录表单中的新隐藏字段:

<input type="hidden" name="members" value="<?php echo @$_REQUEST[\'members\']; ?>">
替换:wp\\u redirect(get\\u permalink(ID))。“?登录=空”);通过

$queryarg=\'?login=empty\';
if(isset($_REQUEST[\'members\']) && $_REQUEST[\'members\']!=\'\'){
    $queryarg .=\'&members=\'$_REQUEST[\'members\'];
}
wp_redirect( get_permalink( ID ) . $queryarg );
但此解决方案已返回:

Parse error: syntax error, unexpected \'$_REQUEST\' (T_VARIABLE) on line 113.
该行涉及beeing$queryarg。=\'&;成员=\'$\\u请求[\'members\']

那么,有什么解决方案可以做到这一点吗?为了使用当前URL中的参数,我应该用什么填写“wp\\u redirect”?

非常感谢。

1 个回复
SO网友:stims

我建议研究一下add_query_arg. 您可以这样使用它:

$params_array = array();

foreach($_GET as $key => $param){
    $params_array[] = $key . \'=\' . urlencode($param);
}

$url = get_permalink(ID) . \'?\' . implode(\'&\', $params_array);

wp_redirect( esc_url_raw( add_query_arg( \'login\', \'empty\', $url ) ) );
或者可以添加多个参数,如下所示:

$params_array = array();

foreach($_GET as $key => $param){
    $params_array[] = $key . \'=\' . urlencode($param);
}

$url = get_permalink(ID) . \'?\' . implode(\'&\', $params_array);

$args = array(
    \'login\' => \'empty\'
    \'param2\' => 1
);

wp_redirect( esc_url_raw( add_query_arg( $args, $url ) ) );
还有一个可选的$url param,没有它$_SERVER[\'REQUEST_URI\'](或当前url)用作主题url,并且由于您需要的是当前url(带参数),因此只需将新参数附加到url的末尾即可。

请注意esc_url_raw, 这个add_query_arg 函数在默认情况下不转义,调用“延迟转义”,从技术上讲,您可以使用esc_url 此外,由于没有显示链接,因此不需要它。