WordPress 的菜單函數(shù) wp_nav_menu() 輸出了固定的 HTML 結(jié)構(gòu),我們可以基于這些結(jié)構(gòu)寫 CSS 樣式。如果你主題的 CSS 是基于 BootStrap 開發(fā)的,直接使用 BootStrap 的導(dǎo)航樣式無疑是一種省時省力的方法,我們只需要修改一下 WordPress wp_nav_menu() 函數(shù)輸出的 HTML 結(jié)構(gòu),讓它和 BootStrap 的結(jié)構(gòu)一樣就可以了。
第一步: 添加自定義 Walker_Nav_Menu 類到主題的 functions.php
class BS3_Walker_Nav_Menu extends Walker_Nav_Menu {
function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
$id_field = $this->db_fields['id'];
if ( isset( $args[0] ) && 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 = 0, $args = array(), $id = 0 ) {
if ( is_object($args) && !empty($args->has_children) )
{
$link_after = $args->link_after;
$args->link_after = ' ';
}
parent::start_el($output, $item, $depth, $args, $id);
if ( is_object($args) && !empty($args->has_children) )
$args->link_after = $link_after;
}
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = '';
$output .= "$indent<ul class=\"dropdown-menu list-unstyled\">";
}
}
第二步, 添加 filter 功能過濾修改上一步未能修改的 HTML
add_filter('nav_menu_link_attributes', 'nav_link_att', 10, 3);
function nav_link_att($atts, $item, $args) {
if ( $args->has_children )
{
$atts['data-toggle'] = 'dropdown';
$atts['class'] = 'dropdown-toggle';
}
return $atts;
}
第三步, 添加 HTML 到 header.php 中
<nav id="nav" class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="row">
<div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header visible-xs">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#"></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse navbar-ex1-collapse">
<?php wp_nav_menu(array(
'container_class' => 'menu-header',
'theme_location' => 'primary',
'items_wrap' => '<ul id="%1$s" class="%2$s nav navbar-nav">%3$s</ul>',
'walker' => new BS3_Walker_Nav_Menu,
'menu' => 'Your Menu'
)); ?>
</div><!-- /.navbar-collapse -->
</div>
</div>
</div>
</nav>/code>
只需要做好上面三步,我們就可以讓 WordPress 的導(dǎo)航菜單支持 BootStrap 3,同理,如果我們使用了其他 CSS 框架,也可以參考上面的代碼讓 WordPress 的導(dǎo)航菜單支持其他 CSS 框架。


