Ottenere l'oggetto menu dalla theme_location

25 set 2011, 21:42:21
Visualizzazioni: 24.6K
Voti: 10

Vorrei ottenere un oggetto menu dal suo argomento theme_location.

Il mio obiettivo è visualizzare separatamente il nome del menu e i nomi dei suoi elementi, URL e descrizione.

Esempio di ciò che sto cercando:

$menu = get_menu('nav-menu'); //ottiene il menu dalla sua theme_location
echo $menu->name; //mostra il nome del menu
foreach($menu->items as $item){
    echo '<a href="'.$item->link'">'.$item->name.'</a>'; //mostra un link alla destinazione dell'elemento
    echo $item->description; //mostra la descrizione dell'elemento
}
0
Tutte le risposte alla domanda 3
0
16

Questo metodo sembra essere quello che stai cercando, utilizzando get_nav_menu_locations() e get_term():

// Ottieni le posizioni dei menu definite dal tema
$theme_locations = get_nav_menu_locations();

// Ottieni l'oggetto del menu in base alla posizione specificata
$menu_obj = get_term( $theme_locations[$theme_location], 'nav_menu' );

// Estrai il nome del menu
$menu_name = $menu_obj->name;

(Vedi il link per la funzione completa; il codice sopra evidenzia solo le funzioni rilevanti di WordPress per ottenere ciò che ti serve.)

25 set 2011 22:02:28
0

Oppure se lo vuoi in una sola riga, copia semplicemente questo e sostituisci "change-this-location-slug" con il tuo slug personalizzato.

$string = get_term(get_nav_menu_locations()['change-this-location-slug'], 'nav_menu')->name;
24 set 2016 19:35:58
0

A partire da WordPress 3.0.0 puoi utilizzare la funzione wp_get_nav_menu_object per recuperare il corrispondente oggetto WP_Term e ottenere il suo nome.

Per recuperare l'ID del menu da passare a wp_get_nav_menu_object puoi usare la funzione get_nav_menu_locations.

Espandendo il tuo esempio:

$menu_id = get_nav_menu_locations()[ 'nav-menu' ];
$menu = wp_get_nav_menu_object( $menu_id );
$items = wp_get_nav_menu_items( $menu_id );
 
echo $menu->name; // Mostra il nome del menu.
foreach($items as $item){
    echo '<a href="'. esc_url( $item->url )'">'. esc_html( $item->title ).'</a>'; // Mostra un link alla destinazione dell'elemento.
    echo $item->description; // Mostra la descrizione dell'elemento.
}
15 ago 2022 18:17:11