我创建了一个包含多个项目(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;
}
}
如何检索当前父项的子项?
提前谢谢!
答案 0 :(得分:2)
您需要为所有孩子提供递归。
这里的例子是
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。
此示例应返回嵌套数组(未经过完全测试)
答案 1 :(得分:0)
作为一种解决方法,我有这个临时解决方案:
$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匹配,我只是将其放入数组中。
答案 2 :(得分:0)
这是我的解决方案。遍历菜单“ MENU NAME”,然后仅显示具有父PARENT_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>