วิธีใช้ wp_nav_menu เพื่อสร้างเมนูแบบเลื่อนลงเลือกได้อย่างไร


21

ฉันกำลังใช้wp_nav_menuฟังก์ชั่นด้านล่างในการสร้างเมนูแบบเลื่อนลงที่รายการแต่ละรายการเป็นตัวเลือกในเมนูแบบเลื่อนลงที่เลือก ...

'items_wrap' => '<select>%3$s</select>'
'before'     => '<option value="">'
'after'      => '</option>'

ฉันจะเพิ่มค่าลิงค์ในการ'before'ประกาศได้อย่างไร มีวิธีที่ดีกว่าที่จะไปเกี่ยวกับเรื่องนี้? ฉันรู้เรื่องwp_dropdown_pagesนี้ แต่ไม่ได้ผลเพราะฉันต้องการให้ผู้ใช้สามารถควบคุมเมนูได้จากหน้า "เมนู"

คำตอบ:


25

คุณไม่สามารถทำสิ่งนี้ได้ด้วย wp_nav_menu เพราะมันจะออกรายการในรายการและคุณจะสร้างมาร์กอัปที่ไม่ถูกต้องด้วยรหัสของคุณ

ลองใช้wp_get_nav_menu_items ()แทน


วิธีแก้ปัญหาอย่างรวดเร็วสำหรับเมนูแบบเลื่อนลงด้วยวอล์คเกอร์ที่กำหนดเอง:

class Walker_Nav_Menu_Dropdown extends Walker_Nav_Menu{

    // don't output children opening tag (`<ul>`)
    public function start_lvl(&$output, $depth){}

    // don't output children closing tag    
    public function end_lvl(&$output, $depth){}

    public function start_el(&$output, $item, $depth, $args){

      // add spacing to the title based on the current depth
      $item->title = str_repeat("&nbsp;", $depth * 4) . $item->title;

      // call the prototype and replace the <li> tag
      // from the generated markup...
      parent::start_el(&$output, $item, $depth, $args);
      $output = str_replace('<li', '<option', $output);
    }

    // replace closing </li> with the closing option tag
    public function end_el(&$output, $item, $depth){
      $output .= "</option>\n";
    }
}

ในเทมเพลตของคุณให้ใช้สิ่งนี้:

wp_nav_menu(array(
  'theme_location' => 'primary', // your theme location here
  'walker'         => new Walker_Nav_Menu_Dropdown(),
  'items_wrap'     => '<select>%3$s</select>',
));

1
ที่จริงแล้วเมื่อใช้ส่วน "items_wrap" ซึ่งจะลบรายการในรายการดังนั้นมาร์กอัพจึงใช้ได้ ฉันจะตรวจสอบลิงค์แม้ว่า ขอบคุณ!
Chris Molitor

ใช่ แต่นั่นไม่ได้จัดการกับ<UL>s ที่ซ้อนกัน:)
onetrickpony

จริง ๆ แล้วมัน :-)
Chris Molitor

1
ตามแหล่งที่มามันไม่เว้นแต่คุณจะใช้วอล์คเกอร์ที่กำหนดเอง ...
onetrickpony

ใช้งานได้หรือไม่?
chrisjlee

0

ฉันพบว่ามีประโยชน์:

คุณสามารถปฏิบัติตามคำตอบใด ๆ เพื่อทำให้เมนู css code dropdovn ง่ายขึ้น

  1. เพิ่มคลาสparentสำหรับรายการที่มีเมนูย่อย
  2. เพิ่มdepthคลาส (ความลึก 0, ความลึก 1, ความลึก 2 ... )

เพิ่มใน function.php ธีมของคุณ

class DD_Wolker_Menu extends Walker_Nav_Menu {
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ){
        $GLOBALS['dd_children'] = ( isset($children_elements[$element->ID]) )? 1:0;
        $GLOBALS['dd_depth'] = (int) $depth;
        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    }
}
add_filter('nav_menu_css_class','add_parent_css',10,2);
function  add_parent_css($classes, $item){
     global  $dd_depth, $dd_children;
     $classes[] = 'depth'.$dd_depth;
     if($dd_children)
         $classes[] = 'parent';
    return $classes;
}

ตอนนี้ใน header.php

wp_nav_menu( array( 'container_class' => '','container' => '',  'menu' => 'header-menu', 'walker'=> new DD_Wolker_Menu ) );

header-menu แทนที่ด้วยชื่อเมนูของคุณ

โค้ดตัวอย่าง CSS อาจเป็น

#menu-header-menu{
    margin: 0;
    padding: 0;
}
#menu-header-menu  ul{

}

#menu-header-menu> li{
    display: inline;
    margin-left: 1.618em;
}
#menu-header-menu  li{
    list-style: none;
}
#menu-header-menu  li a{
    text-decoration: none;
    font-size:  1em;
    font-family:    'Lato',Helvetica,Arial,sans-serif ;
    letter-spacing: 1px;
}
#menu-header-menu li.parent::after{
    content:'+';
}

#menu-header-menu  .sub-menu {
   display: none;
   position: absolute;
   background-color: #fff;
}

#menu-header-menu  li:hover>.sub-menu{
    display: inline;
    width: auto;
    height: auto;
    border: solid 1px #BBBBBB;
    z-index: +1;
}

โดยที่#menu-header-menu- id รายการ UL หลัก (คุณต้องอัปเดตเช่นกัน)


-1

ปลั๊กอินเมนูแบบเลื่อนลงจะตอบคำถาม: wp_nav_menuไม่สามารถใช้ในการสร้างเมนูแบบเลื่อนลงเลือกได้ในขณะที่ปลั๊กอินให้dropdown_menu()ฟังก์ชั่นที่ดีที่ทำงานได้อย่างน่าทึ่ง

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