我正在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?members=%2fprotected-page%2fprivate%2&login=empty。
在URL中保留此“?members”参数允许表单在成功登录后重定向到它们之前试图访问的前一页。否则,在常规情况下,它们将被重定向到常规仪表板。
实际管理错误时重定向的脚本如下所示:
add_action('authenticate','check_username_password',1,3);函数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;
}
}
因此这里创建错误URL的重要部分是:
wp_redirect( get_permalink( ID ) . "?login=empty" );
如果执行“echo$_get[”wlfrom“];”,则可以使用“$_get[”members“]”获得其他UTL参数。它成功地在页面中显示参数。但即使看起来如此简单,我也无法将这个参数添加到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的方式也去。
为了使用当前URL中的参数,我应该用什么填充“wp_redirect”?
谢谢!
在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 );
?>