Recupero di un elenco di voci di menu in un array


16

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

Tuttavia, mi piacerebbe recuperare solo l'elenco delle voci di menu (solo i nomi delle voci di menu effettivi utilizzati nell'area wp-admin per creare il menu e senza html) e vorrei salvare tale elenco di voci in un array (ovvero 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.

Risposte:



46

Come menziona @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.

Detta funzione restituisce una matrice di WP_Post Objectoggetti (quindi si accede ai valori con una freccia, ad es. $item->title).

Per una configurazione di base , è possibile utilizzare 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 scorrere su quella $primaryNavvariabile, ad esempio:

foreach ( $primaryNav as $navItem ) {

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

}

1
per me questo ritorna "falso"
John Smith,

4
Stai incollando @JohnSmith? Dovrai utilizzare l'ID del tuo menu.
Brad Adams,

L'ho trovato molto più semplice rispetto all'utilizzo della classe walker. Ben fatto!
Lee

1

Ottieni una semplice gamma di menu.

Aggiungi a funzioni.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;
}

Vai alla tua intestazione e funzione di chiamata

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

?>

Questa è una risposta decente, tuttavia arriva solo a 1 livello di profondità.
Hybrid Web Dev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.