อัปเดต:ตั้งแต่WordPress 3.7 (ตุลาคม 2013), CSS คลาสได้รับการเพิ่มเพื่อระบุรายการเมนูย่อยและหน้าในเมนูธีม - ไม่จำเป็นต้องใช้วอล์คเกอร์ที่กำหนดเองเพราะมันได้รับการดูแลใน WordPress core
เรียน CSS ที่มีชื่อและmenu-item-has-children
page_item_has_children
สำหรับการแก้ปัญหาที่สมบูรณ์แบบสำหรับทุกคนที่รีบร้อน (ให้เครดิตกับคำตอบก่อนหน้าของ Jan Fabry) โปรดดูการใช้งานเต็มรูปแบบด้านล่าง
แสดงการนำทางในเทมเพลตของธีมของคุณ:
wp_nav_menu( array(
'theme_location' => 'navigation-primary',
'container' => false,
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'walker' => new Selective_Walker(),
'depth' => 2
)
);
จากนั้นรวมสิ่งต่อไปนี้ในธีมของคุณfunctions.php
:
class Selective_Walker extends Walker_Nav_Menu {
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
$id_field = $this->db_fields['id'];
if ( is_object( $args[0] ) ) {
$args[0]->has_children = !empty( $children_elements[$element->$id_field] );
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
function start_el( &$output, $item, $depth, $args ) {
if ( $args->has_children ) {
$item->classes[] = 'has_children';
}
parent::start_el(&$output, $item, $depth, $args);
}
}
ผลลัพธ์ HTML ที่ได้จะมีลักษณะดังต่อไปนี้:
<ul>
<li><a href="#">Home</a></li>
<li class="has_children"><a href="#">About</a>
<ul class="sub-menu">
<li><a href="#">Our Mission</a></li>
</ul>
</li>
<li><a href="#">Services</a></li>
<li class="has_children"><a href="#">Products</a>
<ul class="sub-menu">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Lorem Ipsum</a></li>
</ul>
</li>
<li><a href="#">Contact Us</a></li>
</ul>
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ WordPress' class วอล์คเกอร์ให้ดูที่การทำความเข้าใจชั้นวอล์คเกอร์
สนุก!