Thêm liên kết Đăng xuất trực tuyến vào menu điều hướng


16

Làm cách nào để thêm liên kết vào menu điều hướng chính với class="right"thuộc tính?

Tôi đã cố gắng thêm một liên kết tĩnh example.com/wp-logout.php?action=logoutnhưng điều đó dẫn đến một trang xác nhận đăng xuất. Có cách nào để làm cho nó một liên kết đăng xuất?


1
Bạn đã thấy những câu hỏi và câu trả lời hiện có như thế này chưa?
fuxia

Bạn đã thấy wp_loginout()chưa
kaiser

2
Tôi đã xóa câu trả lời được chấp nhận, vì nó bị đạo văn từ trang web này mà không có sự ghi nhận.
fuxia

Tôi đã kết thúc bằng cách sử dụng một cái gì đó tương tự; ít nhất là sử dụng hàm loginout (). Tôi sẽ đăng chính xác những gì tôi đã làm trong lần tới trước máy tính của tôi. Cảm ơn @toscho
Zach Russell

Bạn có thể sử dụng plugin miễn phí wordpress.org/plugins/login-logout-register-menu để đạt được điều tương tự một cách dễ dàng.
Vinod Dalvi

Câu trả lời:


39

Bạn có thể đạt được điều này bằng cách sử dụng wp_nav_menu_itemsmóc. Chúng ta hãy xem đoạn mã sau đây hiển thị liên kết đăng nhập / đăng xuất trên primaryvị trí menu.

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() .'">'. __("Log Out") .'</a></li>';
      } else {
         $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">'. __("Log In") .'</a></li>';
      }
   }
   return $items;
}

Đây là những gì chúng tôi đã thực hiện trong ví dụ trên.

  1. Đầu tiên thêm một bộ lọc cho wp_nav_menu_itemshook và gắn một chức năng cho nó.
  2. Sau khi kiểm tra primaryvị trí chủ đề, chúng tôi đã kiểm tra xem người dùng có đăng nhập hay không.
  3. Nếu đăng nhập, chúng tôi đã hiển thị Log Outliên kết nếu không Log In liên kết.
  4. Chúng tôi đã chuyển permalink của trang hiện đang xem sang url đăng nhập để người dùng sẽ được chuyển hướng đến trang hiện tại sau khi đăng nhập thành công.
  5. Chúng tôi đã sử dụng class="right"mã trên để đáp ứng yêu cầu của bạn.

Bạn có thể tìm thấy một lời giải thích chi tiết trên blog này .


@ timo-s Trong chủ đề Twenty Seventeen (trẻ em), chủ đề này sẽ chỉ hoạt động với một topvị trí menu : if ($args->theme_location == 'top').
Iurie Malai

vị trí cần thiết cho tôiprimary-menu
Toskan


0

Menu chân trang của tôi là một tiện ích , do đó tôi gặp khó khăn khi sử dụng mã bởi Chittaranjan. Các phiên bản chỉnh sửa sau đây làm việc cho tôi. Tôi cũng đã thay đổi các liên kết và làm cho chúng "động": đăng nhập dẫn đến một trang bạn chọn, đăng xuất sẽ ở lại trang hiện tại hoặc gửi về nhà, nếu trang hiện tại là trang đăng nhập (riêng tư) của bạn. Lý tưởng là nó sẽ kiểm tra xem trang đăng nhập của bạn có thực sự riêng tư không, nhưng tôi không biết làm thế nào để làm điều đó, xin lỗi.

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
    //var_dump($args);
    if (($args->menu->slug == 'footer')) {
        if (is_user_logged_in()) {
            $loginlink = '/your-private-page';
            $logoutlink = get_permalink();
            if (strpos($logoutlink, $loginlink) !== false) {
                $logoutlink = '/';
            }
            $items .= '<li class="right"><a href="'. wp_logout_url($logoutlink) .'">'. __("Log Out") .'</a></li>';
        } else {
            $items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Log In") .'</a></li>';
        }
    }
    return $items;
}

-2
add_filter( 'wp_nav_menu_items', 'add_loginout_link', 15, 5 );

function add_loginout_link( $menus, $args ) {

  if (is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="'. wp_logout_url( get_permalink( woocommerce_get_page_id( 'myaccount' ) ) ) .'">Log Out</a></li>';
    }

  elseif (!is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="' . get_permalink( woocommerce_get_page_id( 'myaccount' ) ) . '">Log In</a></li>';
  }

  return $menus;
}

Bạn cần định dạng mã của mình bằng 4 dấu cách ở đầu mỗi dòng (xem trợ giúp).
Peter HvD

Xin vui lòng không quảng cáo trang web của bạn. Vui lòng chỉnh sửa câu trả lời của bạn với lời giải thích về cách mã này trả lời câu hỏi trong tay, thêm nó vào đâu và cụ thể là gì.
Howdy_McGee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.