从WordPress下拉菜单中删除类“子菜单”

时间:2012-05-14 作者:gil hamer

我正在建立一个wordpress网站,带有动态wordpress菜单+一级下拉菜单(子菜单)。由于我的下拉列表有点棘手,需要特殊的CSS,因此我尝试使用以下代码删除wordpress自动为菜单提供的样式:

function wp_nav_menu_remove_attributes( $menu ){
    return $menu = preg_replace(\'/ id=\\"(.*)\\" class=\\"(.*)\\"/iU\', \'\', $menu );
}
add_filter( \'wp_nav_menu\', \'wp_nav_menu_remove_attributes\' );
代码运行得很好,从UL菜单中删除了所有stling,并保留了纯UL-LI-HTML。现在我的下拉列表有点棘手,需要特殊的css。我在网上到处寻找一个可以删除class="sub-menu" 完全来自ul,并为我提供了使用特殊DIV动态包装此子菜单ul的选项,并为其提供一个类(使用jquery完成)

要尝试演示我要实现的目标,请查看以下HTML:

<div class="navigation">
  <ul>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a>
      <div class="sub-nav"> 
      <span>&nbsp;</span>
        <ul>
          <li><a href="#">link</a></li>
          <li><a href="#">link</a></li>
        </ul>
      </div>
    </li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
  </ul>
</div>
说明:

有一个主DIV,其类名为:"navigation"

  • 在一个简单菜单(ul li a)
  • 下拉列表中,包含一个div,该div的类名为:"sub-nav"
  • 在子菜单的ul之前有一个span标记(我正在使用jquery进行响应)
    1. 这就是实际发生的情况:

      <div class="navigation">
        <ul>
          <li><a href="http://localhost/tusso/">link</a></li>
          <li><a href="http://localhost/tusso/?cat=1">link</a>
            <ul class="sub-menu">
              <span>&nbsp;</span>
              <li><a href="http://localhost/tusso/?cat=1">link</a></li>
              <li><a href="http://localhost/tusso/?cat=1">link</a></li>
            </ul>
          </li>
          <li><a href="http://localhost/tusso/?cat=1">link</a></li>
          <li><a href="http://localhost/tusso/?cat=1">link</a></li>
        </ul>
      </div>
      
      我无法摆脱:什么都无法摆脱。尝试了许多解决方案。什么都没用。请帮忙。

      谢谢Gil

    2 个回复
    最合适的回答,由SO网友:Robert Bouten 整理而成

    任何对代码感兴趣的人都可以删除您想要的任何类。我刚刚处理了根主题,他们做了如下替换。您只需在列表中添加要替换的类。

    /**
     * Replace various active menu class names with "active" or nothing
     *
     */
    
    function roots_wp_nav_menu($text) {
      $replace = array(
        \'current-menu-item\'     => \'active\',
        \'current-menu-parent\'   => \'active\',
        \'menu-item-type-post_type\' => \'\',
        \'menu-item-object-page\' => \'\',
      );
    
      $text = str_replace(array_keys($replace), $replace, $text);
      return $text;
    }
    
    add_filter(\'wp_nav_menu\', \'roots_wp_nav_menu\');
    

    SO网友:Milo

    创建自定义Walker 以所需的任何标记输出菜单。查看wp-includes/nav-menu-template.php 在默认导航菜单漫游器中start_lvl 函数是插入子菜单类的位置。

    结束