Come inserire programmaticamente una nuova voce di menu?

5 nov 2013, 17:10:32
Visualizzazioni: 23.3K
Voti: 8

Sto sviluppando un plugin e voglio inserire elementi del menu in modo programmatico.

Quando il mio tema crea un menu, utilizza questa chiamata:

wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) );

Che risulta in qualcosa del genere nell'HTML:

<div class="nav-menu"><ul>
     <li class="current_page_item"><a href="somewhere">voce-menu-1</a></li>
     <li class="page_item page-item-107"><a href="somewhere-else">voce menu 2</a></li>
</ul></div>

Vorrei poter intercettare questo in qualche modo e inserire il mio HTML programmaticamente prima del tag di chiusura </ul>. Come posso collegarlo?

1
Commenti

Un blog dettagliato: http://goo.gl/TbxqDy

Suresh Kamrushi Suresh Kamrushi
30 set 2015 08:27:03
Tutte le risposte alla domanda 2
5
20

Prima di essere stampati, tutti gli elementi del menu vengono elaborati da un filtro. Puoi utilizzare il filtro wp_nav_menu_items per aggiungere elementi al menu:

// Filtra wp_nav_menu() per aggiungere link aggiuntivi e altro output
function new_nav_menu_items($items) {
    $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
    // aggiunge il link home alla fine del menu
    $items = $items . $homelink;
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );

Oppure, per essere più specifici, puoi indirizzare solo il menu desiderato sostituendo la riga add_filter sopra con la seguente, e sostituendo $menu->slug con il nome effettivo dello slug del tuo menu:

add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

Tutorial originale

5 nov 2013 18:06:24
Commenti

Grazie, ma non succede nulla. Ho persino provato a inserire il tuo codice alla lettera appena prima della chiamata wp_nav_menu del mio tema, e ancora nessun effetto.

august7cbfa7b7 august7cbfa7b7
5 nov 2013 18:31:44

Cosa intendi con "non succede nulla"? Ho appena ricontrollato e un link Home viene aggiunto come primo elemento nel menu. Devi avere un menu definito per la posizione del menu e non devi cadere nel fallback a wp_page_menu(). Il codice funziona sicuramente. Se risponda o meno alla tua domanda è un altro discorso perché non ho davvero capito cosa stavi chiedendo.

helgatheviking helgatheviking
5 nov 2013 18:48:23

Ho modificato il codice per aggiungere il link Home alla fine del menu, ma il principio di WordPress rimane lo stesso.

helgatheviking helgatheviking
5 nov 2013 18:50:40

Non funzionava perché non avevo un menu definito dall'utente. Dopo aver creato il mio menu, funziona. Grazie

august7cbfa7b7 august7cbfa7b7
5 nov 2013 20:00:48

Se stavi chiedendo come aggiungere link al tuo menu e questa risposta ha risolto il problema, dovresti accettarla come soluzione.

helgatheviking helgatheviking
5 nov 2013 23:08:20
5

Puoi impostare container a false e usare l'argomento items_wrap per omettere il ul, in questo modo la funzione restituirà solo i tag li, permettendoti di avvolgerli in qualsiasi elemento ti serva.

wp_nav_menu(
    array(
        'theme_location' => 'primary',
        'items_wrap' => '%3$s',
        'container' => false
    )
);
5 nov 2013 17:23:20
Commenti

Grazie, ma cambia solo <div class="nav-menu">...</div> in <div class="menu">...</div> Quindi ancora non riesco a inserire i miei contenuti perché WordPress genera già la chiusura del menu

august7cbfa7b7 august7cbfa7b7
5 nov 2013 18:29:11

devi creare un menu e assegnarlo alla posizione del tuo tema, immagino tu non l'abbia fatto. Testato e funzionante con l'ultima versione di WordPress e il tema TwentyThirteen.

Milo Milo
5 nov 2013 18:40:02

Sto usando il tema di WordPress (twentytwelve) e quello che sto cercando di fare è modificare il menu superiore del tema. Quindi il menu appare nell'HTML finale con i link alle mie pagine come voci di menu, ma ho bisogno di inserire la mia voce di menu programmaticamente.

august7cbfa7b7 august7cbfa7b7
5 nov 2013 18:46:37

hai creato un menu sotto Appearance > Menus e lo hai assegnato a quella posizione del tema?

Milo Milo
5 nov 2013 18:52:43

OK, ora funziona dopo aver creato un menu personalizzato. Grazie mille!

august7cbfa7b7 august7cbfa7b7
5 nov 2013 19:59:50