我在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”?
谢谢!
答案 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 );
?>