워드프레스에서 로그인/로그아웃 후 특정 페이지로 이동하도록 하고 싶은 경우가 있습니다. 이 경우 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:
- wp login url (WordPress Codex 페이지)
- wp logout url (WordPress Codex 페이지)
- wp loginout (WordPress Codex 페이지)
잘 작동되는군요. 고맙습니다.
확인해주셔서 감사합니다.쌀쌀한 날씨에 건강 조심하세요.