👁 166명의 독자가 공감하셨습니다
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 중에서)
    • 답변은 로그인 후 가능합니다.