问题描述
如果他们尝试访问任何其他页面而不登录,我有一个功能可以将用户重定向到登录页面 (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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。