How to change menu structure?

时间:2019-08-30 作者:Lai32290

当我们使用显示菜单时wp_nav_menu, 它创建的菜单结构如下:

<div class="container">
  <ul class="list">
    <li class="item">
      <a class="link" href="#">Link 1</a>
    </li>
    <li class="item">
      <a class="link" href="#">Link 2</a>
    </li>
    <li class="item">
      <a class="link" href="#">Link 3</a>
    </li>
    <li class="item">
      <a class="link" href="#">Link 4</a>
    </li>
    <li class="item">
      <a class="link" href="#">Link 5</a>
    </li>
  </ul>
</div>
我如何才能将其更改为这样:

<div class="container">
  <a href="#">Item 1</a>
  <a href="#">Item 2</a>
  <a href="#">Item 3</a>
  <a href="#">Item 4</a>
  <a href="#">Item 5</a>
</div>
我试图通过过滤器对其进行自定义,但我无法通过参数检查菜单,参数只是为空。

我的代码如下:

// page.php
wp_nav_menu([ \'theme_location\' => \'sidebar_menu\' ]);

// functions.php
function custom_menu($items, $args) {
    // ....
    print_r($args); // NULL
}

apply_filter(\'wp_nav_menu\', \'custom_menu\');

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

自定义菜单标记只能通过添加WordPress过滤器和使用您自己的自定义菜单模板来完成。

不幸的是,菜单不是WordPress template hierarchy 所以你需要这样做:

add_filter( \'wp_nav_menu\', function( $nav_menu, $args ) {
  if( \'my_custom_menu\' == $args->menu->slug ) {
    // include a template with your required markup
    // reference both the $nav_menu and $args params in the template
    return include(\'my-nav-template.php\');
  } else {
    return $nav_menu;
  }
}, 10, 2);
这是一个略略的答案。您需要阅读nav_menu object / function 为了准确地知道如何解析对象,但这很简单。

此外,请确保在调用之前注册了侧栏菜单wp_nav_menu() 在尝试此代码之前,至少有一个菜单已分配给侧栏。

祝你好运

相关推荐

使用Apply_Filters()的要点

当我试图开发一个插件时,我试图看到其他插件也能完成我的插件将要实现的功能,然后我看到开发人员在大多数功能中使用该功能apply_filters() 我不明白为什么。下面是一个示例:public static function myFunction() { return apply_filters( \'du/class/method\' array( \'index\' => \'value\', \'index\' =&g