로그인 후 사용자를 원래 URL로 리디렉션 하시겠습니까?


16

로그인하지 않고 다른 페이지에 액세스하려는 경우 사용자를 로그인 페이지 (홈)로 리디렉션하는 기능이 있습니다. 작동 방법은 다음과 같습니다.

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

정말 간단하고 잘 작동하는 문제는 WordPress 백엔드가 작동하는 것처럼 로그인 한 후 이동하려는 URL로 리디렉션해야한다는 것입니다.

이것을 할 수있는 방법이 있습니까? 미리 감사드립니다!

답변:


16

쉽게 할 수 있습니다. 리디렉션 매개 변수 만 지정하면됩니다. 홈페이지에서 로그인 링크를 사용하여 로그인 페이지로 이동하면 @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 );
?>

필요에 따라 다른 매개 변수를 변경하십시오.


사용자 정의 양식을 사용하고 있으며 제공된 숨겨진 필드 솔루션을 사용하고 있지만 제 경우에는 'localhost / wordpress / localhost / wordpress / blog / someone'과 같은 URL로 리디렉션됩니다. 어떤 도움?
rafi

나는 이것을 가지고있다, 나는 이중 슬래시를 사용하고있다. 그래서 내 솔루션은 <? php echo '//'과 같습니다. $ _SERVER [ "HTTP_HOST"]. $ _SERVER [ "REQUEST_URI"]; ?>
rafi

6

인수 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;.


말이 안 돼요, 리다이렉션은 집으로 가야합니다. 잘 작동하고 있습니다. 원래 URL을 잡아서 로그인하면 사용자를 리다이렉트 할 수있는 방법이 필요합니다.
Javier Villanueva

죄송합니다. 귀하의 질문을 원래 이해하지 못했습니다. 귀하의 유스 케이스를 다룰 수있는 수정 사항을 추가했습니다.
칩 베넷

4

고마워, 나는 모든 사람들이 권장하는 약간의 비트를 사용했다.

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

그리고 내 로그인 양식에서 (wp_login_form에 대해 알려 주신 @Ashfame 덕분에 내 응용 프로그램에서 로그인 양식을 하드 코딩하고 있습니다. 존재 여부는 알 수 없었습니다) 사용자 자격 증명이 양호하고 로그인 할 준비가되면 이것을 추가했습니다.

if (isset($_REQUEST['redirect_to'])){
    wp_redirect($_REQUEST['redirect_to']);
    // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit;
    exit;

} else {
    wp_redirect(get_bloginfo('url') . '/groups/');
    exit;
}

도와 주셔서 감사합니다. 모두 투표했습니다!


안녕하세요 Javier, 어떤 파일에서이 기능들을 추가 했습니까? 감사.
Tyler Durden

에서functions.php
Javier Villanueva

4
exit()또는 die()후에 전화해야합니다 wp_redirect(). 그렇지 않으면 코드 wp_redirect()가 실행 된 후 버그 및 보안 취약점이 발생할 수 있습니다.
Ian Dunn

2

이것은 사람들을 사용하여 wp 로그인 페이지로 안내하는 코드입니다. 그런 다음 로그인하면 원래 위치로 돌아 왔습니다. 그러나 그것은 홈 페이지가 아니라 사용자 정의 로그인을 설정하는 워드 프레스 로그인 페이지입니다.

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

연구하고 싶을 수도 있습니다. 일반적으로 다음과 같은 방법으로 사용자의 현재 URL을 얻습니다.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]


0

login_redirect필터 후크는 여기보다 완전하고 효과적인 솔루션입니다. 이 방법으로, 다른 레벨의 사용자에게 다른 경로 재 지정 경로를 제공하거나 로그인 할 때 오류가 발생할 경우 경로 재 지정 URL을 유지할 수 있습니다 (예 : 올바르지 않은 비밀번호).

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

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

0

그것은 당신의 대답 중 어느 것도 효과가 없지만 약간만 추가하면 효과가 있습니다! 여기 내 코드 :

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

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

내가 추가 한 것만 /wp-login.php@Matt의 응답과 비교하여 했지만 나에게는 열쇠가되었습니다. 희망이 도움이됩니다! :)

**편집하다:

HTTPS에서 탐색하기 위해 워드 프레스를 사용할 때 오류가 감지되었습니다. 리디렉션이 HTTP로되어 있으므로이 방법이 작동하지 않습니다. 문제를 해결하기 위해 기능을 변경했습니다. 결과는 다음과 같습니다.

function restrict_access_if_logged_out(){
  global $wp;
  $protocol='http';
  if (isset($_SERVER['HTTPS']))
    if (strtoupper($_SERVER['HTTPS'])=='ON')
      $protocol='https';
  if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
    $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

프로토콜을 확인한 다음 ' esc_url'을 삭제 하고 올바른 프로토콜을 추가했습니다 $protocol://. 또한을 변경했습니다 "".

이 페이지를 기반으로 합니다 .


0

나는 이것이 매우 늦다는 것을 알고 있지만, 미래의 사람들이 이것을 찾아서 필요로 할 때 이것을하는 방법에 대해 정확하게 글을 올렸습니다.

http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다. 답변 방법을 참조하십시오 .
Gabriel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.