Cập nhật: Kể từ WordPress 3.7 (tháng 10 năm 2013), các lớp CSS đã được thêm vào để chỉ ra các mục và trang menu con trong menu chủ đề - không cần sử dụng trình đi bộ tùy chỉnh như được chăm sóc trong lõi WordPress.
Các lớp CSS được đặt tên menu-item-has-children
và page_item_has_children
.
Để biết giải pháp hoàn chỉnh cho bất kỳ ai đang vội (ghi có vào câu trả lời trước của Jan Fabry), hãy xem phần thực hiện đầy đủ bên dưới.
Xuất điều hướng trong mẫu của chủ đề của bạn:
wp_nav_menu( array(
'theme_location' => 'navigation-primary',
'container' => false,
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'walker' => new Selective_Walker(),
'depth' => 2
)
);
Sau đó, bao gồm các mục sau trong chủ đề của bạn 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);
}
}
Kết quả đầu ra HTML sẽ giống như sau:
<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>
Để biết thêm thông tin về việc sử dụng lớp walker của WordPress, hãy xem Tìm hiểu về Walker Class .
Thưởng thức!