J'ai construit une simple fonction php qui récupère un menu Wordpress et le convertit en un tableau lisible. Voici mon code:
function wp_get_menu_array($current_menu) { $array_menu = wp_get_nav_menu_items($current_menu); $menu = array(); foreach ($array_menu as $m) { if (empty($m->menu_item_parent)) { $menu[$m->ID] = array(); $menu[$m->ID]['ID'] = $m->ID; $menu[$m->ID]['title'] = $m->title; $menu[$m->ID]['url'] = $m->url; $menu[$m->ID]['children'] = array(); } } $submenu = array(); foreach ($array_menu as $m) { if ($m->menu_item_parent) { $submenu[$m->ID] = array(); $submenu[$m->ID]['ID'] = $m->ID; $submenu[$m->ID]['title'] = $m->title; $submenu[$m->ID]['url'] = $m->url; $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID]; } } return $menu; }
Ce que je voudrais réaliser, c'est un autre (# submenu2) qui parcourra $ submenu, vérifiera si l'un d'entre eux sont des parents postaux et insérera leurs enfants sous les dans le tableau.
En d'autres termes: Ce tableau crée actuellement une relation comme celle-ci:
(si le parent n'a pas d'enfants, attribuez ces valeurs) (si le parent a des enfants, parcourez les enfants et ajoutez ces valeurs) Je veux ajouter (si l'enfant a des enfants, parcourez les enfants et ajoutez ces valeurs).
Tout pointeur sur où / comment la troisième boucle irait, je l'apprécierais beaucoup.
Merci à l'avance!
3 Réponses :
Est-ce que beaucoup de code est vraiment nécessaire?
Vous pouvez vérifier le code suivant -
wp_get_nav_menu_items( 'Your_Manu_ID' )
Malheureusement, le tableau est là pour une raison spécifique et j'en ai besoin, en appliquant des classes et des champs personnalisés aux éléments de menu lors du rendu.
Le problème de la construction d'un arbre à partir d'un tableau plat a été résolu ici avec cette solution récursive légèrement modifiée:
function buildTree( array &$elements, $parentId = 0 ) { $branch = array(); foreach ( $elements as &$element ) { if ( $element->menu_item_parent == $parentId ) { $children = buildTree( $elements, $element->ID ); if ( $children ) $element->wpse_children = $children; $branch[$element->ID] = $element; unset( $element ); } } return $branch; } $array_menu = wp_get_nav_menu_items('main-menu'); //put the menu slug here $menu = buildTree( $array_menu ); echo '<pre>'; print_r($menu);
Travaillez pour moi:
function wp_get_menu_array($current_menu) { $array_menu = wp_get_nav_menu_items($current_menu); $menu = array(); foreach ($array_menu as $m) { if (empty($m->menu_item_parent)) { $menu[$m->ID] = array(); $menu[$m->ID]['ID'] = $m->ID; $menu[$m->ID]['title'] = $m->title; $menu[$m->ID]['class'] = $m->class; $menu[$m->ID]['url'] = $m->url; $menu[$m->ID]['children'] = array(); } } $submenu = array(); foreach ($array_menu as $m) { if ($m->menu_item_parent) { $submenu[$m->ID] = array(); $submenu[$m->ID]['ID'] = $m->ID; $submenu[$m->ID]['title'] = $m->title; $submenu[$m->ID]['class'] = $m->class; $submenu[$m->ID]['url'] = $m->url; $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID]; } } return $menu; } // HABILITAR O TERCEIRO NÃVEL DE SUBMENUS AO MENU PRINCIPAL function terceiro_nivel($current_menu,$idMenu){ $array_menu = wp_get_nav_menu_items($current_menu); $menu = array(); $i = 0; $saida = ""; foreach ($array_menu as $m) { if ($m->menu_item_parent == $idMenu) { if($i==0){ $saida = $saida.' <ul class="terceiro-nivel"> <div> '; $i++; } $saida = $saida.'<li class="valide-'.$m->menu_item_parent.'"><a href="'.$m->url.'" title="'.$m->title.'">'.$m->title.'</a></li>'; } } if($i!=0){ $saida = $saida.' </div> </ul>'; } return $saida; }
Dans functions.php:
<nav> <ul> <?php $itens_menu = wp_get_menu_array("principal"); ?> <?php $menu_corrente = 0; foreach($itens_menu as $menu){ if($menu_corrente==0) $classe = "todos-os-produtos"; if($menu_corrente==1) $classe = "home"; if($menu_corrente>1) $classe = ""; if(count($menu["children"])==0): ?> <li class="sou-categoria-<?php echo $menu["ID"] ?>"><a class="<?php echo $classe; ?>" href="<?php echo $menu["url"]; ?>" title=""><?php echo $menu["title"]; ?></a></li> <?php else: ?> <li class="sou-categoria-<?php echo $menu["ID"] ?>"><a class="<?php echo $classe; ?>" href="<?php echo $menu["url"]; ?>" title=""><?php echo $menu["title"]; ?></a> <ul> <?php foreach($menu["children"] as $submenu){ ?> <li><a href="<?php echo $submenu["url"]; ?>" title="<?php echo $submenu["title"]; ?>"><?php echo $submenu["title"]; ?></a> <?php echo terceiro_nivel("principal",$submenu["ID"]); ?> </li> <?php } ?> </ul> </li> <?php endif; $menu_corrente++; } ?> <li> <a href="javascript:void(0)" onclick="toogleBuscaHeaderFixo()" title="Faça uma pesquisa" class="btn btn-primary"><i class="fa fa-search"></i></a> </li> <li> <a href="<?php echo get_option('home'); ?>/carrinho" title="Meu Carrinho" class="btn btn-primary"> <i class="fa fa-shopping-cart " aria-hidden="true"></i> Carrinho: <span> <?php global $woocommerce; echo $woocommerce->cart->get_cart_total(); ?> </span> </a> </li> </ul> </nav>