问题描述

如果他们尝试访问任何其他页面而不登录,我有一个功能可以将用户重定向到登录页面 (home),这是它的工作原理:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

真的很简单,工作正常,问题是我需要将它们重定向到他们成功登录后试图去的 URL,就像 WordPress 后端一样。

有没有办法做到这一点?提前致谢!

最佳解决方案

你可以轻松地做到这一点。您只需要指定一个重定向参数。如果您在主页上使用登录链接进入登录页面,那么 @ sisir 的解决方案是正确的。

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

如果您在首页上使用自定义表单,那么在<form> 中,请确保您使用该 URL 重写一个隐藏的字段

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />

并且如果您使用 wp_login_form()生成表单,则填写参数 – http://codex.wordpress.org/Function_Reference/wp_login_form

<?php
$args = array(
        'echo' => true,
        'redirect' => site_url( $_SERVER['REQUEST_URI'] ),
        'form_id' => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in' => __( 'Log In' ),
        'id_username' => 'user_login',
        'id_password' => 'user_pass',
        'id_remember' => 'rememberme',
        'id_submit' => 'wp-submit',
        'remember' => true,
        'value_username' => NULL,
        'value_remember' => false );

wp_login_form( $args );
?>

根据您有或需要更改其他参数。

次佳解决方案

尝试通过 the_permalink()作为 $redirect 参数:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( the_permalink() );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

编辑:

对不起,原来你误会了你的问题。尝试这个:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] );
        wp_redirect( $redirect );
        exit;
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

注意:正确使用 wp_redirect()通常需要添加 exit;,我已经添加到我的第二个例子。

第三种解决方案

感谢所有,我使用了一些大家推荐的,所以最终我的代码看起来像这样:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

在我的登录表单上 (我正在使用我的登录表单感谢 @Ashfame 让我知道关于 wp_login_form 我不知道是否存在) 我添加这个用户凭证是正常的,他们准备好登录:

if (isset($_REQUEST['redirect_to'])){
    wp_redirect($_REQUEST['redirect_to']);
} else {
    wp_redirect(get_bloginfo('url') . '/groups/');
}

非常感谢您的帮助,我投了赞成票!

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。