首页 > 解决方案 > 获取所有子菜单项和容器 WordPress

问题描述

我在 WordPress 中有以下菜单结构:

我正在使用 WordPresswp_nav_menu_objects过滤器来检索所有子菜单项。我必须使用下面的代码:

add_filter( 'wp_nav_menu_objects', 'my_wp_nav_menu_objects_sub_menu', 10, 2 );

// filter_hook function to react on sub_menu flag
function my_wp_nav_menu_objects_sub_menu( $sorted_menu_items, $args ) {


  if ( isset( $args->sub_menu ) ) {

    foreach ( $sorted_menu_items as $key => $item ) {

      if ( $item->menu_item_parent == '0' ) { // only get sub-menu items
        unset( $sorted_menu_items[$key] );
      }

    }

    return $sorted_menu_items;

  } else {
    return $sorted_menu_items;
  }
}

太显示导航:

wp_nav_menu( array(
    'theme_location' => 'main-menu',
    'menu_id' => 'sub-menus',
    'menu_class'=>'menu',
    'container'=>'ul',
    'sub_menu' => true,
) );

这导致HTML:

<ul>
  <li>Submenu 1</li>
  <li>Submenu 2</li>
  <li>Submenu 3</li>
  <li>Submenu 4</li>
  <li>Submenu 5</li>
  <li>Submenu 6</li>
</ul>

理想情况下,我希望每个子菜单“组”都在自己的<ul>容器中,但我似乎无法弄清楚如何做到这一点。Bellow 是首选结果的一个示例。

<ul>
  <ul>
    <li>Submenu 1</li>
    <li>Submenu 2</li>
    <li>Submenu 3</li>
  </ul>
  <ul>
    <li>Submenu 4</li>
    <li>Submenu 5</li>
  </ul>
  <ul>
    <li>Submenu 6</li>
  </ul>
</ul>

任何有关如何解决此问题的建议将不胜感激!

标签: phpwordpress

解决方案


您不能插入 html,因为 Wordpress 会处理结果。但是,您可以在 for 循环中插入一些代码来创建一个仅包含 html 的数组。然后可以将每个条目的文本和链接传递给您想要处理它的任何代码。

因此,您将使用代码替换循环中的 unspec 语句,以仅使用 html 构建数组,如您所需输出的示例中所示。您还将创建一个新参数来处理这个新数组。


推荐阅读