How to create this Custom Walker Menu

It's the first time I'm trying to create a customized menu Walker. I'm following a very specific HTML. I

It's the first time I'm trying to create a customized menu Walker. I'm following a very specific HTML. I searched and tried different things. Days have passed and I still can't get it right, but I don't want to give up.

This is the HTML I'm trying to output:

<!-- <ul class="menu"> -->

  <li class="menu-item">
    <div class="contains-submenu">
      <span class="menu-title"><a href="www.link">Item</a></span>

      <div class="submenu">
        <div class="container">

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
            <a href="www.link">Item</a>
          </div>

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
            <a href="www.link">Item</a>
            <a href="www.link">Item</a>
          </div>

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
          </div>

        </div>
      </div>

    </div>
  </li>

  <li class="menu-item">
    <div class="contains-submenu">
      <span class="menu-title"><a href="www.site/link">Item</a></span>

      <div class="submenu">
        <div class="container">

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
          </div>

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
          </div>

        </div>
      </div>

    </div>
  </li>

  <li class="menu-item">
    <div class="contains-submenu">
      <span class="menu-title"><a href="www.link">Item</a></span>

      <div class="submenu">
        <div class="container">

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
          </div>

          <div class="submenu-item">
            <div style='background-image: url("www.site/icon")'></div>
            <p>Description</p>
            <a href="www.link">Item</a>
          </div>

        </div>
      </div>

    </div>
  </li>

  <li class="menu-item">
    <div>
      <span class="menu-title"><a href="www.link">Item</a></span>
    </div>
  </li>

<!-- </ul> -->

This is my current attempt:

class Walker_Nav_Primary extends Walker_Nav_Menu {

  function start_lvl(&$output, $depth = 0, $args = array()) {
    $indent = str_repeat("\t", $depth);

    if ($depth === 0) {
      $output .= "\n$indent<div class='submenu'>\n";
      $output .= "\n$indent<div class='container'>\n";
    }

  }

  function end_lvl(&$output, $depth = 0, $args = array()) {
    $indent = str_repeat("\t", $depth);

    if ($depth === 0) {
      $output .= "\n$indent</div></div>\n";
    }
    if ($depth === 1) {
      $output .= "\n$indent</div>\n";
    }

  }

  function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
    $indent = ($depth) ? str_repeat("\t", $depth) : '';

    $attributes  = !empty($item->attr_title) ? ' title="'  . esc_attr($item->attr_title ) .'"' : '';
    $attributes .= !empty($item->target)     ? ' target="' . esc_attr($item->target     ) .'"' : '';
    $attributes .= !empty($item->xfn)        ? ' rel="'    . esc_attr($item->xfn        ) .'"' : '';
    $attributes .= !empty($item->url)        ? ' href="'   . esc_attr($item->url        ) .'"' : '';

    if ($depth === 0) {
      $output .= $indent . "<li class='menu-item'>\n";
      $output .= $indent . "<div class='contains-submenu'>";
      $item_output .= "<span class='menu-title'><a". $attributes .">";
      $item_output .= apply_filters("the_title", $item->title, $item->ID);
      $item_output .= "</a></span>";
    }

    if ($depth === 1) {
      $output .= $indent . "<div class='submenu-item'>\n";
      $output .= $indent . "<div style='background-image: url(\"" . $item->url . "\")></div>";
      $output .= $indent . "<p>" . $item->description ."</p>";
    }

    if ($depth === 2) {
      $item_output .= $indent . "<a". $attributes . "></a>";
    }

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

}

The menu structure on the WordPress admin area is like this:

Item
  Subitem ---> custom link that contains link for icon and description
    Child Item
    Child Item
    Child Item
  Subitem
    Child Item
    Child Item
Item
  Subitem
    Child Item

// and so on...

The Items and Child Items are simple links for pages.
The Subitems are custom links that contains an icon url and description.
There is no Subitem empty, without at least one Child Item inside it.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744791539a4593945.html

相关推荐

  • How to create this Custom Walker Menu

    It's the first time I'm trying to create a customized menu Walker. I'm following a very specific HTML. I

    10小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信