it-swarm.dev

Recupero di un elenco di voci di menu in un array

Attualmente sto lavorando a un tema personalizzato. In questo tema, ho un menu che ho registrato utilizzando register-nav-menu, quindi visualizzo il menu sulla mia pagina web utilizzando la funzione wp_nav_menu.

Tuttavia, mi piace recuperare l'elenco delle sole voci del menu (solo i nomi effettivi delle voci di menu che sono stati utilizzati nell'area di wp-admin per creare il menu e senza alcun html) e vorrei salvare quell'elenco di elementi in un array (cioè, non visualizzarlo).

Quindi, un codice psuedo sarebbe simile a questo

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

C'è un modo per farlo? Grazie.

11
Greeso

wp_get_nav_menu_items sembrerebbe essere esattamente quello che ti serve. Restituisce una matrice di oggetti di menu.

7
vancoder

Come cita @vancoder, wp_get_nav_menu_items() è la strada da percorrere, tuttavia penso che una risposta più dettagliata sarebbe più utile per le persone in futuro.

La funzione detta restituisce una matrice di oggetti WP_Post Object (quindi si accede ai valori con una freccia, ad esempio $item->title).

Per un basic setup, puoi usare quanto segue:

$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.

Quindi puoi semplicemente eseguire il loop su quella variabile $primaryNav, ad esempio:

foreach ( $primaryNav as $navItem ) {

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

}
36
Brad Adams