【问题标题】:Wordpress custom submenu layoutWordpress 自定义子菜单布局
【发布时间】:2015-07-24 00:29:34
【问题描述】:

如何彻底改变 WP 中子菜单的布局? 通常 WP 生成菜单为 UL > LI > UL > LI。但我需要将其更改为:UL > LI > DIV > ... > DIV > UL > ... 所以必须有额外的元素/包装子菜单。这些包装器还必须包含自定义 CSS 类。 有没有办法通过一些钩子或一些插件来做到这一点?

输出应该是这样的

<ul>
  <li>
    <a href="..."></a>
    <div class="sub">
      <div class="wrapper">
        <div class="section">
          <div class="title"><a href="..."></a></div>
          <ul>
            <li><a href="..."></a></li>
            ...
            <li><a href="..."></a></li>
          </ul>
        </div>
        <div class="section">
          <div class="title"><a href="..."></a></div>
          <ul>
            <li><a href="..."></a></li>
            ...
            <li><a href="..."></a></li>
          </ul>
        </div>
        ...
      </div>
    </div>
  </li>
  <li>
    <a href="..."></a>
    <div class="sub">
      <div class="wrapper">
        <div class="section">
          <div class="title"><a href="..."></a></div>
          <ul>
            <li><a href="..."></a></li>
            ...
            <li><a href="..."></a></li>
          </ul>
        </div>
        <div class="section">
          <div class="title"><a href="..."></a></div>
          <ul>
            <li><a href="..."></a></li>
            ...
            <li><a href="..."></a></li>
          </ul>
        </div>
        ...
      </div>
    </div>
  </li>
  ...
</ul>

谢谢

【问题讨论】:

    标签: html css wordpress layout submenu


    【解决方案1】:

    编辑显示菜单的模板(可能是header.php),并找到wp_nav_menu 函数。像这样添加或更新参数items_wrapbeforeafter

    wp_nav_menu(array(
        'menu' => 'your menu',
        // [...] existing menu options
        'items_wrap' => '<div><ul id="%1$s" class="%2$s">%3$s</ul></div>', // will put a div on ul
        'before' => '<div>', // before the link
        'after' => '</div>' // after the link
    ));
    

    https://codex.wordpress.org/Function_Reference/wp_nav_menu#Parameters

    【讨论】:

    • 您确定您在正确的文件中编辑了正确的菜单?之后尝试回显内容以检查您是否在右侧菜单上进行了更改。
    • 是的,菜单是正确的。&lt;?php wp_nav_menu(array( 'container' =&gt; '', 'container_class' =&gt; '', 'theme_location' =&gt; 'top', 'items_wrap' =&gt; '&lt;div&gt;&lt;ul id="%1$s" class="%2$s"&gt;%3$s&lt;/ul&gt;&lt;/div&gt;', // will put a div on ul 'before' =&gt; '&lt;div&gt;', // before the link 'after' =&gt; '&lt;/div&gt;' // after the link )); ?&gt;
    • 检查您的 functions.php 是否在 wp_page_menu_args 上应用了任何过滤器。
    • 是的,有 wp_page_menu_args 过滤器。我已将其删除,现在 items_wrap 可以工作,但结果是 DIV > UL > LI > UL > LI 而不是 UL > LI > DIV > DIV > UL。
    • 请编辑您的原始问题以添加当前的 HTML 和所需的 HTML 输出,因为我没有得到您想要的 div 的位置 - 它应该在链接周围,在链接内部,就在附近子菜单...?一个你想要的例子会让帮助更容易。
    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多