使用wp_NAV_MENU将HTMLBootstrap导航菜单转换为WordPress菜单

时间:2018-09-06 作者:istoby

我正在尝试将现有的HTML引导菜单转换为Wordpress主题菜单。我已经在Wordpress中创建了名为“Primary”的菜单,但在主题中无法获得与HTML中完全相同的菜单。现在,我的HTML引导代码如下所示:

<div class="container">
  <nav class="navbar navbar-expand-lg navbar-light" id="mainNav">
    <a class="navbar-brand js-scroll-trigger" href="#page-top">Logo</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive"
      aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarResponsive">
      <ul class="navbar-nav ml-auto">
        <li class="nav-item">
          <a class="nav-link js-scroll-trigger" href="menu-1.html">Menu-1</a>
        </li>
        <li class="nav-item">
          <a class="nav-link js-scroll-trigger" href="menu-2.html">Menu-2</a>
        </li>
        <li class="nav-item">
          <a class="nav-link js-scroll-trigger" href="menu-3.html">Menu-3</a>
        </li>
        <li class="nav-item">
          <a class="nav-link js-scroll-trigger" href="menu-4.html">Menu-4</a>
        </li>
      </ul>
    </div>
  </nav>
</div>
有人能帮忙吗?

1 个回复
最合适的回答,由SO网友:benny-ben 整理而成

您必须在以下位置编辑文件:

wordpress/wp-content/themes/twentyseventeen/template-parts/navigation/navigation-top.php
然后创建一个自定义步行器,试着看一看here.

请尝试以下方法:

<?php
/**
 * Displays top navigation
 *
 * @package WordPress
 * @subpackage Twenty_Seventeen
 * @since 1.0
 * @version 1.2
 */

?>
<div class="container">
  <nav class="navbar navbar-expand-lg navbar-light" id="mainNav">
    <a class="navbar-brand js-scroll-trigger" href="#page-top">Logo</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive"
      aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarResponsive">

    <?php

  wp_nav_menu( array(
    \'container\'      => false,
    \'menu_id\'        => \'istoby-nav\',
    \'menu_class\'     => \'navbar-nav ml-auto\',
    \'items_wrap\'     => \'<ul id="%1$s" class="%2$s">%3$s</ul>\',
    \'theme_location\' => \'top\',
    \'depth\'          => 5,
    \'fallback_cb\'    => false,
    \'walker\'         => new Bootstrap_Menu_Walker()
  ) );

  class Bootstrap_Menu_Walker extends Walker_Nav_Menu {

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

      if ( isset( $args->item_spacing ) && \'discard\' === $args->item_spacing ) {
        $t = \'\';
        $n = \'\';
      } else {
        $t = "\\t";
        $n = "\\n";
      }
      $indent = ( $depth ) ? str_repeat( $t, $depth ) : \'\';

      $classes = empty( $item->classes ) ? array() : (array) $item->classes;
      $classes[] = \'menu-item-\' . $item->ID;

      // Filters the arguments for a single nav menu item
      $args = apply_filters( \'nav_menu_item_args\', $args, $item, $depth );

      // Filters the CSS class(es) applied to a menu item\'s list item element
      $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args, $depth ) );
      $class_names = $class_names ? \' class="\' . esc_attr( $class_names ) . \'"\' : \'\';

      // Filters the ID applied to a menu item\'s list item element
      $id = apply_filters( \'nav_menu_item_id\', \'menu-item-\'. $item->ID, $item, $args, $depth );
      $id = $id ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';

      $output .= $indent . \'<li\' . $id . $class_names .\'>\';

      // it would be better to enter the class in Appearance -> Menus -> Screen Options -> CSS classes
      // $output .= $indent . \'<li\' . $id . $class_names .\'>\';
      $output .= $indent . \'<li class="nav-item">\';

      $atts = array();
      $atts[\'title\']  = ! empty( $item->attr_title ) ? $item->attr_title : \'\';
      $atts[\'target\'] = ! empty( $item->target )     ? $item->target     : \'\';
      $atts[\'rel\']    = ! empty( $item->xfn )        ? $item->xfn        : \'\';
      $atts[\'href\']   = ! empty( $item->url )        ? $item->url        : \'\';

      // Filters the HTML attributes applied to a menu item\'s anchor element
      $atts = apply_filters( \'nav_menu_link_attributes\', $atts, $item, $args, $depth );

      $attributes = \'\';
      foreach ( $atts as $attr => $value ) {
        if ( ! empty( $value ) ) {
          $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
          $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
        }
      }
      $title = apply_filters( \'the_title\', $item->title, $item->ID );

      // Filters a menu item\'s title
      $title = apply_filters( \'nav_menu_item_title\', $title, $item, $args, $depth );

      $item_output = $args->before;
      $item_output .= \'<a class="nav-link js-scroll-trigger"\'. $attributes .\'>\';
      $item_output .= $args->link_before . $title . $args->link_after;
      $item_output .= \'</a>\';
      $item_output .= $args->after;

      $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }
  }

  ?>

    </div>
  </nav>
</div>
有关更多信息,请查看:

您还可以在以下位置编辑文件:

wordpress/wp-content/themes/twentyseventeen/header.php
你有没有想过从一个空白的主题开始understrap?

结束

相关推荐

Add extra markup to WP menus

我被要求将一个HTML网站重新开发为一个WP主题,它有一个非常高级的菜单结构,我不太确定如何复制它。第二个菜单项有一个子菜单,但它不仅仅是“li”中的“ul”,还有额外的div等。。因为下拉列表有3列布局,其中2列包含子链接,第3列包含内容。这是一个示例:<ul class=\"nav navbar-nav three\"> <li class=\"dropdown yamm-fw\"> <a href=\"#\" class=\"dropdown-toggl