👁 175명의 독자가 공감하셨습니다
- 이 주제에는 0개 답변, 1명 참여가 있으며 mimoon가 4 년, 3 월 전에 전에 마지막으로 업데이트했습니다.
-
글쓴이글
-
2020-09-18 9:29 오후 #9438
증상:
통상 로그아웃 메뉴를 만들 때 링크 주소로 /wp-login.php?action=logout 을 제안한다. 그러나 곧바로 로그아웃이 안 되거나 리다이렉션이 안 걸리는 경우가 있다.
원인:
사이트 기초 주소가 변경되었을 때 이런 증상이 있거나, Ultimate Member 플러그인처럼 로그인/아웃 페이지로 훅을 걸었다 풀었다 하는 과정에서 경로가 망가지는 것으로 보인다.
조치:
1. 인터넷 브라우저 캐시를 비울 필요가 있다.
2. 하지만 그것만 가지고는 안 된다. /wp-login.php?action=logout 를 주소로 걸어서 쓰는 것을 지양하고, wp_logout_url() 함수를 통해서 로그아웃하는 방식을 써야 한다.
3. 문제는 wp_logout_url() 을 메뉴에서 어떻게 뿌려주느냐인데, 우선 가장 기본적인 형식은 다음과 같다.
1) 로그아웃을 링크로 걸어서 쓴다.
<a href="<?php echo wp_logout_url(); ?>">Logout</a>
2) 로그아웃과 동시에 메인 홈 페이지로 리다이렉트시킬 수 있다.
<a href="<?php echo wp_logout_url( home_url() ); ?>">Logout</a>
3) 로그아웃과 동시에 현재 페이지로 리다이렉트시킬 수도 있다.
<a href="<?php echo wp_logout_url( get_permalink() ); ?>">Logout</a>
4. 또 다른 문제는 메뉴에 뿌려주는 문제이다.
1) Function.php에서 아예 메뉴를 선언하는 방법이 있다.
(/wp-login.php?action=logout 를 링크 주소로 메뉴를 구현할 때 발생하는 문제의 대안이다)/*// 로그인 시 로그아웃 메뉴를 표시하고 로그아웃 시 로그인 메뉴 표시하기 // Show Login menu item when logged out and show Logout menu item when logged in add_filter( 'wp_nav_menu_items', 'add_loginout_link', 10, 2 ); function add_loginout_link( $items, $args ) { if (is_user_logged_in() && $args->theme_location == 'primary') { $items .= '<li><a href="'. wp_logout_url() .'">Logo out</a></li>'; } elseif (!is_user_logged_in() && $args->theme_location == 'primary') { $items .= '<li><a href="'. site_url('wp-login.php') .'">Log in</a></li>'; } return $items; } */
2) 하지만 이 경우 메뉴에서 메뉴 버튼으로 콘트롤이 불가능하다. 그래서 쇼코드화하는 대안이 있다.
/* Shortcode to fetch the logout URL */ add_shortcode( 'login_logout', 'login_logout' ); /** [login_logout] shortcode. * Add a login/logout shortcode button * @since 1.0.0 */ function login_logout() { ob_start(); if (is_user_logged_in()) : // Set the logout URL - below it is set to the root URL ?> <a href="<?php echo wp_logout_url('/'); ?>">Log Out</a> <?php else : // Set the login URL - below it is set to get_permalink() - you can set that to whatever URL eg '/whatever' ?> <a href="<?php echo wp_login_url(get_permalink()); ?>">Log In</a> <?php endif; return ob_get_clean(); }
3) 하지만 위의 코드는 로그인 버튼이 생성되지 않는다. 그래서 이를 보완한 쇼코드를 개발했다.
// 숏코드는: Logout_link_code /* Shortcode to fetch the logout wp_logout_url('/') */ function Logout_link( $logout_button ) { //If user isn't logged in, return nothing if(!is_user_logged_in()) { return; } else { extract( shortcode_atts( array( 'text' => "", // default value if none supplied 'class' => "" //Style class for link ), $logout_button ) ); if ( $text ) { return '<a href="' . wp_logout_url('/'). '">' . $text . '</a>'; } } } add_shortcode( 'Logout_link_code', 'Logout_link' );
4) 위와 같이 Function.php에 뿌려주고 메뉴에서 사용자정의로 버튼을 끌어온 다음,
라고 기입한다.
한글 제목이 적용될 뿐만 아니라 당초 wp_logout_url(‘/’)가 아주 잘 작동한다.
-
글쓴이글
- 답변은 로그인 후 가능합니다.