[wordpress] 로그아웃이 잘 안 되는 문제

 👁55명의 독자가 공감하셨습니다 
1 글 보임 - 1 에서 1 까지 (총 1 중에서)
  • 글쓴이
  • #9438
    mimoon
    키 마스터

    증상:

    통상 로그아웃 메뉴를 만들 때 링크 주소로 /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(‘/’)가 아주 잘 작동한다.

1 글 보임 - 1 에서 1 까지 (총 1 중에서)
  • 답변은 로그인 후 가능합니다.
헤르메네이아 미문 (美門)