เพิ่มลิงก์“ ออกจากระบบ” ไปที่เมนูนำทาง


16

ฉันจะเพิ่มลิงค์ไปยังเมนูนำทางหลักพร้อมclass="right"แอตทริบิวต์ได้อย่างไร

ฉันพยายามเพิ่มลิงค์แบบคงที่example.com/wp-logout.php?action=logoutแต่นำไปสู่หน้ายืนยันการออกจากระบบ มีวิธีที่จะทำให้มันเป็นลิงค์ออกจากระบบหรือไม่?


1
คุณเคยเห็นคำถามและคำตอบที่มีอยู่เช่นนี้หรือไม่?
fuxia

คุณเคยเห็นwp_loginout()?
ไกเซอร์

2
ฉันได้ลบคำตอบที่ยอมรับแล้วเนื่องจากมีการลอกเลียนแบบจากเว็บไซต์นี้โดยไม่มีการระบุแหล่งที่มา
fuxia

ฉันใช้สิ่งที่คล้ายกัน อย่างน้อยใช้ฟังก์ชัน loginout () ฉันจะโพสต์สิ่งที่ฉันทำในครั้งต่อไปที่ฉันอยู่หน้าคอมพิวเตอร์ ขอบคุณ @toscho
Zach Russell

คุณสามารถใช้ปลั๊กอินฟรีwordpress.org/plugins/login-logout-register-menu นี้เพื่อให้บรรลุเป้าหมายเดียวกันได้อย่างง่ายดาย
Vinod Dalvi

คำตอบ:


39

คุณสามารถทำได้โดยใช้wp_nav_menu_itemsเบ็ด มาดูโค้ดต่อไปนี้ซึ่งแสดงลิงค์ล็อกอิน / ล็อกเอาต์บนตำแหน่งprimaryเมนู

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;
}

นี่คือสิ่งที่เรานำมาใช้ในตัวอย่างด้านบน

  1. เพิ่มตัวกรองสำหรับwp_nav_menu_itemshook ก่อนและแนบฟังก์ชันเข้ากับมัน
  2. หลังจากตรวจสอบprimaryตำแหน่งของธีมเราได้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้หรือไม่
  3. หากเข้าสู่ระบบที่เราได้แสดงให้เห็นถึงLog Outการเชื่อมโยงมิฉะนั้นLog In การเชื่อมโยง
  4. เราได้ผ่านการอนุญาตของหน้าการดูในปัจจุบันไปยัง URL การเข้าสู่ระบบเพื่อให้ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าปัจจุบันหลังจากเข้าสู่ระบบที่ประสบความสำเร็จ
  5. เราได้ใช้class="right"รหัสข้างต้นเพื่อตอบสนองความต้องการของคุณ

คุณสามารถค้นหาคำอธิบายโดยละเอียดในบล็อกนี้


@ timo-s ในชุดรูปแบบยี่สิบเจ็ด (เด็ก) สิ่งนี้จะใช้ได้กับตำแหน่งtopเมนูif ($args->theme_location == 'top')เท่านั้น:
Iurie Malai

สถานที่ที่จำเป็นสำหรับฉันprimary-menu
Toskan

2

ลองเพิ่มลิงค์ที่กำหนดเองด้วยhttp://example.com/wp-login.php?action=logout มันใช้ได้สำหรับฉัน!


1
สิ่งนี้นำเสนอผู้ใช้ด้วย "คุณแน่ใจหรือว่าต้องการออกจากระบบ?" พรอมต์เนื่องจากความจริงที่ว่า nonce จะหายไป
cale_b

0

เมนูส่วนท้ายของฉันเป็นวิดเจ็ตดังนั้นฉันจึงมีปัญหาในการใช้รหัสโดย Chittaranjan เวอร์ชันที่แก้ไขต่อไปนี้ใช้งานได้สำหรับฉัน ฉันได้เปลี่ยนลิงก์และทำให้พวกเขาเป็น "ไดนามิก": การเข้าสู่ระบบจะนำไปสู่หน้าเว็บที่คุณเลือกการออกจากระบบจะอยู่ในหน้าปัจจุบันหรือส่งไปที่บ้านหากหน้าปัจจุบันเป็นหน้าเข้าสู่ระบบ (ส่วนตัว) ของคุณ เป็นการดีที่จะตรวจสอบว่าหน้าเข้าสู่ระบบของคุณเป็นส่วนตัวจริง ๆ หรือไม่ แต่ฉันไม่รู้ว่าต้องทำอย่างไรขออภัย

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;
}

คุณต้องฟอร์แมตโค้ดโดยใช้ช่องว่าง 4 ช่องที่จุดเริ่มต้นของแต่ละบรรทัด (ดูวิธีใช้)
Peter HvD

กรุณาอย่าโฆษณาเว็บไซต์ของคุณ โปรดแก้ไขคำตอบของคุณพร้อมคำอธิบายเกี่ยวกับวิธีที่รหัสนี้จะตอบคำถามในมือสถานที่ที่จะเพิ่มและสิ่งที่ทำโดยเฉพาะ
Howdy_McGee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.