Php 如何获取父菜单项的子项?

Php 如何获取父菜单项的子项?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我创建了一个菜单,其中有几个项目(WooCommerce类别),每个项目都有几个子项目(WooCommerce产品) 我正在努力检索父菜单项的子项 我正在使用以下代码获取父项: $the_menu = wp_get_nav_menu_object('Some Menu'); $the_menu_items = wp_get_nav_menu_items($the_menu); foreach ($the_menu_items as $index => $menu_item)

我创建了一个菜单,其中有几个项目(WooCommerce类别),每个项目都有几个子项目(WooCommerce产品)

我正在努力检索父菜单项的子项

我正在使用以下代码获取父项:

$the_menu       = wp_get_nav_menu_object('Some Menu');
$the_menu_items = wp_get_nav_menu_items($the_menu);

foreach ($the_menu_items as $index => $menu_item) {
    if ($menu_item->object_id == $category->term_id ) {
        $category_submenu = $menu_item;
    }
}
如何检索当前父项的子项


提前谢谢你

作为解决办法,我有以下临时解决方案:

$the_menu       = wp_get_nav_menu_object('Some Menu');
$the_menu_items = wp_get_nav_menu_items($the_menu);

$category_products = [];

foreach ($the_menu_items as $index => $menu_category) {
    if ($menu_category->object_id == $category->term_id ) {
        $category_submenu = $menu_category;
    }
}

foreach ($the_menu_items as $index => $menu_product) {
    if ($menu_product->type_label == 'Product'
         && $menu_product->menu_item_parent == $category_submenu->ID
    ) {
        $category_products[] = $menu_product;
    }
}

我正在解析所有菜单项(父项和子项),根据当前类别ID获取必要的项,然后通过再次解析所有项并检查当前项(产品)是否正确来检索每个类别的子项(产品)父ID与父类别项ID匹配,我只是将其放入一个数组中。

作为一种解决方法,我有以下临时解决方案:

$the_menu       = wp_get_nav_menu_object('Some Menu');
$the_menu_items = wp_get_nav_menu_items($the_menu);

$category_products = [];

foreach ($the_menu_items as $index => $menu_category) {
    if ($menu_category->object_id == $category->term_id ) {
        $category_submenu = $menu_category;
    }
}

foreach ($the_menu_items as $index => $menu_product) {
    if ($menu_product->type_label == 'Product'
         && $menu_product->menu_item_parent == $category_submenu->ID
    ) {
        $category_products[] = $menu_product;
    }
}

我正在解析所有菜单项(父项和子项),根据当前类别ID获取必要的项,然后通过再次解析所有项并检查当前项(产品)是否正确来检索每个类别的子项(产品)父ID与父类别项ID匹配,我只是将其放入一个数组中。

您需要对所有子项进行递归

这里是一个例子

if ( ! function_exists( 'recursive_mitems_to_array' ) ) {
    /**
     * @param $items
     * @param int $parent
     *
     * @return array
     */
    function recursive_mitems_to_array( $items, $parent = 0 )
    {
        $bundle = [];
        foreach ( $items as $item ) {
            if ( $item->menu_item_parent == $parent ) {
                $child               = recursive_mitems_to_array( $items, $item->ID );
                $bundle[ $item->ID ] = [
                    'item'   => $item,
                    'childs' => $child
                ];
            }
        }

        return $bundle;
    }
}
用法:

$items = wp_get_nav_menu_items( "Default Theme Menu" ); // Your menu title
$build_tree = recursive_mitems_to_array( $items );

var_dump(build_tree);
注意:适合您的需要

也许您需要输出带有值的html


此示例应返回嵌套数组(未完全测试)

您需要对所有子对象进行递归

这里是一个例子

if ( ! function_exists( 'recursive_mitems_to_array' ) ) {
    /**
     * @param $items
     * @param int $parent
     *
     * @return array
     */
    function recursive_mitems_to_array( $items, $parent = 0 )
    {
        $bundle = [];
        foreach ( $items as $item ) {
            if ( $item->menu_item_parent == $parent ) {
                $child               = recursive_mitems_to_array( $items, $item->ID );
                $bundle[ $item->ID ] = [
                    'item'   => $item,
                    'childs' => $child
                ];
            }
        }

        return $bundle;
    }
}
用法:

$items = wp_get_nav_menu_items( "Default Theme Menu" ); // Your menu title
$build_tree = recursive_mitems_to_array( $items );

var_dump(build_tree);
注意:适合您的需要

也许您需要输出带有值的html


此示例应返回嵌套数组(未完全测试)

这是我的解决方案。循环浏览菜单“菜单名”,然后仅显示具有父项ID的项

<ul>
  <? foreach (wp_get_nav_menu_items('MENU_NAME') as $r) {
    if ($r->menu_item_parent == PARENT_ID) { echo '<li><a href="'.$r->url.'">'.$r->title.'</a></li>'; }
  } ?>
</ul>

这是我的解决方案。循环浏览菜单“菜单名”,然后仅显示具有父项ID的项

<ul>
  <? foreach (wp_get_nav_menu_items('MENU_NAME') as $r) {
    if ($r->menu_item_parent == PARENT_ID) { echo '<li><a href="'.$r->url.'">'.$r->title.'</a></li>'; }
  } ?>
</ul>

你的方法很巧妙。:)非常感谢。你的方法很巧妙非常感谢。