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

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

워드프레스에서는 로그아웃 후 이동(리디렉션)하는 페이지를 변경할 수 있도록 필터를 제공합니다. 다음과 같은 함수를 테마의 함수 파일(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이라는 플러그인을 사용하면 로그인 및 로그아웃 시 사용자별, 권한별로 페이지를 지정할 수 있습니다.

Peters Login Redirect

 


로그인 후 리디렉션

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

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:

참고:

 

떠나시기 전에 아무 댓글(Comments)이라도 남겨두세요.
기부를 통해 이 블로그의 운영을 후원하실 수 있습니다.