提问者:小点点

从URL中使用$GET参数,创建一个新的重定向URL(Wordpress)


我正在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”?

    谢谢!


  • 共1个答案

    匿名用户

    在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 );
    
    ?>