WordPress输出Bootstrap4结构的菜单
文 / @WordPress主题
使用Bootstrap可以快速制作出漂亮的WordPress主题,为开发工作节省不少时间和精力。但由于WordPress的一些HTML是使用内置函数输出的,所以结构上可能并不符合Bootstrap的要求,也就是缺少Bootstrap样式需要的类名,其中导航菜单部分是最棘手的。
通常我们在制作WordPress主题时,为了方便后期能够在后台自定义菜单,都会在主题里注册一个菜单,functions.php里添加如下代码:
register_nav_menus( array( 'bzg_primary_nav' => __('主导航', 'bzg'), ) );
然后在header.php中调用:
wp_nav_menu( array( 'depth' => 2, 'container' => false, 'items_wrap' => '%3$s', 'theme_location' => 'bzg_primary_nav', ) );
如果需要这个菜单应用Bootstrap4的样式,则需要在functions.php中添加以下代码来替换菜单中的一些类名:
function bzg_nav_class( $classes ) { foreach($classes as $key=>$val) { switch($val) { case 'menu-item' : $classes[$key] = 'nav-item'; break; case 'current-menu-item' : $classes[$key] = 'active'; break; case 'current-menu-parent' : $classes[$key] = 'dropdown'; break; case 'current_page_item' : unset($classes[$key]); break; case 'menu-item-object-custom' : unset($classes[$key]); break; case 'menu-item-type-custom' : unset($classes[$key]); break; case 'menu-item-type-taxonomy' : unset($classes[$key]); break; case 'menu-item-object-category' : unset($classes[$key]); break; case 'menu-item-type-post_type' : unset($classes[$key]); break; case 'menu-item-object-page' : unset($classes[$key]); break; case 'current-menu-ancestor' : unset($classes[$key]); break; case 'current_page_parent' : unset($classes[$key]); break; case 'current_page_ancestor' : unset($classes[$key]); break; case 'menu-item-has-children' : $classes[$key] = 'dropdown'; break; default: } } return $classes; } add_filter( 'nav_menu_css_class', 'bzg_nav_class', 10, 1 ); function bzg_submenu_css_class( $classes ) { $classes[0] = 'dropdown-menu'; return $classes; } add_filter( 'nav_menu_submenu_css_class', 'bzg_submenu_css_class', 10, 1 ); function bzg_nav_menu_link_attributes( $atts, $item, $args, $depth ) { $atts['class'] = 'nav-link'; if(array_search('menu-item-has-children', $item->classes) !== false) { $atts['class'] .= ' dropdown-toggle'; $atts['id'] = ''; $atts['href'] = '#'; $atts['data-toggle'] = 'dropdown'; $atts['aria-haspopup'] = 'true'; $atts['aria-expanded'] = 'false'; } if($depth > 0) { $atts['class'] = 'dropdown-item'; } return $atts; } add_filter( 'nav_menu_link_attributes', 'bzg_nav_menu_link_attributes', 10, 4 );

相关文章
-
搭建一个WordPress网站需要多少成本 2023-11-06 00:09:51
-
Symlink介绍(附:如何使用Symlink进行WordPress开发) 2023-11-05 23:38:32
-
让WordPress实现数据库同步的插件:HyperDB 2023-10-24 23:40:49
-
allegro电商平台值得做吗(附:2023年Allegro注册流程指南) 2023-10-08 21:53:39
-
印度跨境电商平台有哪些(附:印度跨境电商做什么产品好) 2023-10-08 21:34:23
-
跨境电商必看的几大海外二手电商平台 2023-10-08 18:04:42
-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02