Recuperar una lista de elementos de menú en una matriz

16

Actualmente estoy trabajando en un tema personalizado. En este tema, tengo un menú que me registré usando register-nav-menu, y luego estoy mostrando el menú a mi página web usando la wp_nav_menufunción.

Sin embargo, me gusta recuperar solo la lista de elementos de menú (los nombres de elementos de menú reales que solo se usaron en el área wp-admin para crear el menú, y sin ningún html), y me gustaría guardar esa lista de elementos en una matriz (es decir, no mostrarlo).

Entonces, un código psuedo se vería así

$menu_items = get_list_of_items($name_of_menu); // $name_of_menu is the result of register-nav-menu, and get_list_of_items is the psuedo function
foreach ($menu_items as $item) {
    // do something with the item
}

¿Hay alguna manera de hacerlo? Gracias.

Greeso
fuente

Respuestas:

46

Como @vancoder menciona, wp_get_nav_menu_items()es el camino a seguir, sin embargo, creo que una respuesta mejor detallada sería más útil para las personas en el futuro.

Dicha función devuelve una matriz de WP_Post Objectobjetos (para que pueda acceder a los valores con una flecha, por ejemplo $item->title).

Para una configuración básica , puede usar lo siguiente:

$menuLocations = get_nav_menu_locations(); // Get our nav locations (set in our theme, usually functions.php)
                                           // This returns an array of menu locations ([LOCATION_NAME] = MENU_ID);

$menuID = $menuLocations['primary']; // Get the *primary* menu ID

$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.

Luego, puede simplemente recorrer esa $primaryNavvariable, por ejemplo:

foreach ( $primaryNav as $navItem ) {

    echo '<li><a href="'.$navItem->url.'" title="'.$navItem->title.'">'.$navItem->title.'</a></li>';

}
Brad Adams
fuente
1
para mí esto devuelve "falso"
John Smith
44
¿Estás copiando @JohnSmith? Tendrá que usar la ID de su menú.
Brad Adams
Encontré esto mucho más fácil que usar la clase walker. ¡Buena esa!
Lee
1

Obtenga una variedad simple de menú.

Añadir a funciones.php

    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;
}

Vaya a su encabezado y llame a la función

<?php
 $a = wp_get_menu_array('top-menu-header');                         
 print_r($a); exit;                       

?>
Mahesh Kathiriya
fuente
Esta es una respuesta decente, sin embargo, solo va 1 nivel de profundidad.
Hybrid Web Dev