如果页面为wp-login.php且$_GET[‘Level’]=X,则重定向已登录用户

时间:2020-05-20 作者:ermSO

我读过很多关于在go-to/wp登录时重定向登录用户的帖子。php。然而,我的情况有点不同。例如,我希望我的用户单击一个链接,将他们带到“/wp login.php?action=register&;level=7”。如果用户已登录,则应将其重定向到“会员帐户/会员资格签出/?级别=7”。我尝试了以下代码。

function custom_level_login_redirect()
{
    $isPageLogin = is_page(\'login\');
    $isUserLoggedIn = is_user_logged_in();
    $level = $_GET[\'level\'];

    if( is_page(\'login\') && is_user_logged_in() && !empty($_GET[\'level\']) && is_numeric($_GET[\'level\'])) {
        $level = intval($_GET[\'level\']);
        $redirect_to = 
            site_url("membership-account/membership-checkout/?level=" . (string) $level, null);    
            wp_redirect( $redirect_to );
            exit();
    }

    return;
}
add_action(\'login_init\', \'custom_level_login_redirect\');
上述代码不会在“login init”上执行。当我尝试将“wp”作为操作时,“level”url参数不可用。如果我将其设置为过滤器并使用“login\\u redirect”作为挂钩,则代码不会执行。我总是被重定向到“?1589985914”,这只是指索引(主页)。

我应该挂接什么操作或过滤器来重定向已登录的用户,并将其发送到wp登录。带有url参数的php页面?

1 个回复
SO网友:John Zenith

上述代码逻辑的计算结果可能不正确,请按如下方式进行重构:

function custom_level_login_redirect()
{
    $isPageLogin = is_page(\'login\');
    $isUserLoggedIn = is_user_logged_in();
    $level = (int) $_GET[\'level\'];

    if( $isPageLogin && isUserLoggedin && $level > 0 ) {
        $redirect_to = esc_url_raw( 
            site_url("membership-account/membership-checkout/?level=" . $level, null) );
            exit( wp_redirect( $redirect_to ) );
    }

    return;
}

add_action(\'login_init\', \'custom_level_login_redirect\');
请注意esc\\u url\\u raw()、$level变量转换和if()语句。