让 WordPress 的 wp_nav_menu 函数支持 Bootstrap 3

WordPress 的菜单函数 wp_nav_menu() 输出了固定的 HTML 结构,我们可以基于这些结构写 CSS 样式。如果你主题的 CSS 是基于 BootStrap 开发的,直接使用 BootStrap 的导航样式无疑是一种省时省力的方法,我们只需要修改一下 WordPress wp_nav_menu() 函数输出的 HTML 结构,让它和 BootStrap 的结构一样就可以了。
第一步: 添加自定义 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
    "; } }

第二步, 添加 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 中

/code>

只需要做好上面三步,我们就可以让 WordPress 的导航菜单支持 BootStrap 3,同理,如果我们使用了其他 CSS 框架,也可以参考上面的代码让 WordPress 的导航菜单支持其他 CSS 框架。

声明:本站资源绿色无后门无广告,可放心下载。如无特殊说明或标注,均为本站原创发布,转载请注明出处!