Php 获取所有子菜单项和容器WordPress

Php 获取所有子菜单项和容器WordPress,php,wordpress,Php,Wordpress,我在WordPress中有以下菜单结构: 父1 子菜单1 子菜单2 子菜单3 家长2 子菜单4 子菜单5 家长3 子菜单6 我正在使用WordPresswp\u nav\u menu\u objects过滤器检索所有子菜单项。我必须使用下面的代码: add_filter( 'wp_nav_menu_objects', 'my_wp_nav_menu_objects_sub_menu', 10, 2 ); // filter_hook function to react on s

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

  • 父1
    • 子菜单1
    • 子菜单2
    • 子菜单3
  • 家长2
    • 子菜单4
    • 子菜单5
  • 家长3
    • 子菜单6
我正在使用WordPress
wp\u nav\u menu\u 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>
  • 子菜单1
  • 子菜单2
  • 子菜单3
  • 子菜单4
  • 子菜单5
  • 子菜单6
理想情况下,我希望每个子菜单“组”都位于自己的
容器中,但我似乎不知道如何做到这一点。下面是首选结果的一个示例

<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>
    • 子菜单1
    • 子菜单2
    • 子菜单3
    • 子菜单4
    • 子菜单5
    • 子菜单6

任何关于如何解决这个问题的建议都将不胜感激

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


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

您可以将另一个parm添加到传递到筛选器的$args中。在本例中,它将是一个数组,它将保存html。您在当前代码中使用$args->sub_菜单完成了此操作,并使用isset语句引用它。

如果我理解您的答案,您希望我在for循环中传递HTML,但是过滤器
“wp_nav_menu_objects”
返回一个对象。所以我认为在这个过滤器中不可能使用HTML。