베스트셀링 인기 워드프레스 테마 Top 30 자세한 정보

워드프레스 로그인/로그아웃 후 특정 페이지로 이동하기

Last Updated: 2022년 5월 3일 | 2개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

워드프레스에서 로그인/로그아웃 후 특정 페이지로 이동하도록 하고 싶은 경우가 있습니다. 이 경우 LoginWP와 같은 플러그인을 사용하면 쉽게 로그인 또는 로그아웃 후 원하는 곳으로 리디렉션시킬 수 있습니다. 플러그인 사용을 선호하지 않는다면 아래에서 소개하는 코드를 참고하여 응용할 수 있습니다.

[ 이 글을 2022년 5월 3일에 최종 업데이트되었습니다. ]

로그아웃 후 특정 페이지로 리디렉션(이동)

워드프레스에서는 로그아웃 후 이동(리디렉션)하는 페이지를 변경할 수 있도록 필터를 제공합니다. 다음과 같은 함수를 테마의 함수 파일(functions.php)에 추가하여 로그아웃 시 특정 페이지로 리디렉션시킬 수 있습니다.

add_filter( 'wpmem_logout_redirect', 'my_logout_redirect' );

function my_logout_redirect()
{
// 로그아웃 시 리디렉션될 URL 반환
return 'http://yourdomain.com/your-page';
}

로그아웃 후 현재 페이지를 벗어나지 않도록 하기

만약 로그아웃 시 현재 페이지에서 벗어나지 않게 하려면 다음과 같은 함수를 사용할 수 있습니다.

function wpse_44020_logout_redirect($logouturl, $redir)
{
return $logouturl . '&redirect_to='.get_permalink();
}
add_filter('logout_url', 'wpse_44020_logout_redirect', 10, 2);
// Source: http://wordpress.stackexchange.com/

참고로 위 코드는 비관리자 페이지에서만 작동합니다.  모든 페이지에서 작동하게 하려면 다음 라인을

return $logouturl . '&redirect_to='.get_permalink();

다음과 같이 수정하도록 합니다.

return $logouturl . '&redirect_to=http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

그리고 Peter's Login Redirect이라는 플러그인을 사용하면 로그인 및 로그아웃 시 사용자별, 권한별로 페이지를 지정할 수 있습니다.

워드프레스 로그인 리디렉션 플러그인

Peter's Login Redirect 플러그인은 오랫동안 방치되다가 플러그인명을 LoginWP로 바꾸면서 활발히 업데이트가 되고 있는 것 같습니다.

로그인 후 리디렉션

참고로 로그인 후 리디렉션은 다음과 같은 함수를 사용할 수 있습니다.

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

// Source: http://wpscholar.com/

위의 함수는 테마에 따라 잘 작동하지 않는 경우도 있습니다. 그럴 경우 아래를 참고로 제대로 작동하는 함수를 찾아보시기 바랍니다.

다음 함수는 로그인 후 일반 사용자를 현재 페이지로 리디렉션시킵니다(페이지를 벗어나지 않음).

// Redirects to current page after login in wordpress for non-administrators
function acme_login_redirect( $redirect_to, $request, $user  ) {
return ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) ? admin_url() : get_permalink();
}
add_filter( 'login_redirect', 'acme_login_redirect', 10, 3 );

홈페이지로 리디렉션시키려면 get_permalink() 부분을 site_url()로 바꾸도록 합니다. 다음 함수는 로그인 후 일반 사용자를 홈페이지로 리디렉션시킵니다.

// Redirects normal users (non-administrators) to homepage after login
// Redirects adminstrators to Dashboard
function acme_login_redirect( $redirect_to, $request, $user  ) {
return ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) ? admin_url() : site_url();
}
add_filter( 'login_redirect', 'acme_login_redirect', 10, 3 );

다음 함수를 추가하면 메뉴 이름이 'primary'인 메뉴에 로그인/로그아웃 메뉴 항목을 추가합니다. 로그인/로그아웃 후에도 현재 페이지를 벗어나지 않습니다.

// Add Login and Logout menu itmes to menu whose menu name (theme_location) is 'primary'
// Redirects to current page after login/lgout

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
if ($args->theme_location == 'primary') {
if (is_user_logged_in()) {
$items .= '<li class="right"><a href="'. wp_logout_url( get_permalink() ) .'">Logout</a></li>'; // 로그아웃
} else {
$items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">Login</a></li>'; // 로그인
}
}
return $items;
}
// Source: stackexchange

리디렉션시키는 다양한 방법이 있습니다. 보통은 간단한 함수 코드로 작동해야 하지만, 간혹 테마에 따라서 혹은 설치된 플러그인과의 충돌 등으로 제대로 작동하지 않을 수도 있습니다. 다양한 방법으로 테스트하여 사용 중인 환경과 잘 맞는 방법을 찾으시기 바랍니다.

References:

참고:



2 개 댓글

Leave a Comment