[wordpress主题]WordPress输出Bootstrap导航栏结构的菜单例子

时间:2020-08-25  来源:样式布局  阅读:

最近tennfy在用Bootstrap重写博客主题,由于之前没有用过Bootstrap,所以也是花了不少功夫来了解Bootstrap。Bootstrap提供了很完整的css样式布局,对于有一定前端基础的人来说真的非常方便。

利用Bootstrap做wordpress主题遇到的第一个问题就是输出Bootstrap导航栏结构的菜单,这样才能够利用Bootstrap提供的样式进行菜单的显示。本文就来介绍下如何实现wordpress输出Bootstrap的菜单结构。

Bootstrap导航栏结构

常见的Bootstrap导航栏为如下形式:

defaultnavbar_demo

其HTML结构为:


自定义wp_nav_menu函数

熟悉wordpress的朋友都知道,wordpress一般采用wp_nav_menu函数输出菜单,而通过该函数输出的菜单是得不到上述的html结构的。不过值得高兴的是,wp_nav_menu函数支持自定义输出html结构。

wordpress中wp_nav_menu函数的参数如下所示:


 
$defaults = array(  
    "theme_location"  => "",  
    "menu"            => "",  
    "container"       => "div",  
    "container_class" => "",  
    "container_id"    => "",  
    "menu_class"      => "menu",  
    "menu_id"         => "",  
    "echo"            => true,  
    "fallback_cb"     => "wp_page_menu",  
    "before"          => "",  
    "after"           => "",  
    "link_before"     => "",  
    "link_after"      => "",  
    "items_wrap"      => "

    %3$s",  
        "depth"           => 0,  
        "walker"          => "" 
    );  
     
    wp_nav_menu( $defaults );  
     
    ?>

    其中,我们需要修改的就是walker参数。

    输出Bootstrap导航栏结构菜单

    在header.php中,通过如下代码输出导航栏菜单:

    上面代码中walker参数的值是一个类,所以接下来你需要添加这个类,在主题的functions.php文件中添加下面代码:


     
    /**
     * Class Name: wp_bootstrap_navwalker 
     * GitHub URI: https://github.com/twittem/wp-bootstrap-navwalker 
     * Description: A custom WordPress nav walker class to implement the Bootstrap 3 navigation style in a custom theme using the WordPress built in menu manager. 
     * Version: 2.0.4 
     * Author: Edward McIntyre - @twittem 
     * License: GPL-2.0+ 
     * License URI: http://www.gnu.org/licenses/gpl-2.0.txt 
     */ 
     
    class wp_bootstrap_navwalker extends Walker_Nav_Menu {  
     
        /**
         * @see Walker::start_lvl() 
         * @since 3.0.0 
         * 
         * @param string $output Passed by reference. Used to append additional content. 
         * @param int $depth Depth of page. Used for padding. 
         */ 
        public function start_lvl( &$output, $depth = 0, $args = array() ) {  
            $indent = str_repeat( "\t", $depth );  
            $output .= "\n$indent

      \n";  
          }  
       
          /**
           * @see Walker::start_el() 
           * @since 3.0.0 
           * 
           * @param string $output Passed by reference. Used to append additional content. 
           * @param object $item Menu item data object. 
           * @param int $depth Depth of menu item. Used for padding. 
           * @param int $current_page Menu item ID. 
           * @param object $args 
           */ 
          public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {  
              $indent = ( $depth ) ? str_repeat( "\t", $depth ) : "";  
       
              /**
               * Dividers, Headers or Disabled 
               * ============================= 
               * Determine whether the item is a Divider, Header, Disabled or regular 
               * menu item. To prevent errors we use the strcasecmp() function to so a 
               * comparison that is not case sensitive. The strcasecmp() function returns 
               * a 0 if the strings are equal. 
               */ 
              if ( strcasecmp( $item->attr_title, "divider" ) == 0 && $depth === 1 ) {  
                  $output .= $indent . "
相关阅读 猜你喜欢
本类排行 本类最新