Come creare un menu a tendina come nel tema Twenty Eleven?
Mi piace molto la soluzione del menu a tendina del tema Twenty Eleven:
http://twentyelevendemo.wordpress.com/
e vorrei crearne uno simile ma non riesco a capire come funziona, oppure se è basato su qualche codice esistente per i menu a tendina?
Esiste del codice sorgente che può essere utilizzato, o qualcuno può spiegare il principio alla base?
So che internet è pieno di soluzioni sia con JavaScript che senza, ne ho anche create alcune io stesso, ma secondo me niente si avvicina a questo menu, quindi ogni aiuto è apprezzato :)

Ecco un breve snippet che utilizzo per iniziare i miei progetti:
Il primo passo è aggiungere del codice al file functions.php. Questo abiliterà il Menu Personalizzato di WordPress. I controlli saranno disponibili in Aspetto>Menu una volta terminato. Codice per functions.php:
<?php
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array(
'main' => __( 'Menu Principale' ), // Traduzione: Menu Principale
'secondary-menu' => __( 'Menu Secondario' ), // Traduzione: Menu Secondario
));
}
?>
Il codice sopra permette di creare due menu. Ti mostrerò come aggiungerne uno, e se vuoi puoi usare lo stesso metodo per aggiungerne un secondo dove preferisci.
Il passo successivo è aggiungere il codice al file header.php. Nota sopra che il primo menu nell'array è etichettato come 'main'. Questo è ciò che useremo per posizionare il menu nell'header.php.
Ecco il codice per header.php:
<div id="menu" class="menu-center">
<?php wp_nav_menu( array( 'theme_location' => 'main' ) ); ?>
</div>
Questo dovrebbe essere posizionato all'interno dei tuoi <div id="header">
(non è obbligatorio, ma è il posto più comune per questo codice).
L'ultimo passo è aggiungere del CSS per stilizzare il menu e renderlo effettivamente "a tendina", invece di un insieme di link multilivello.
Il codice CSS:
ul.menu,ul.menu ul,ul.menu li,ul.menu a {
display:block;
margin:0;
padding:0;
}
ul.menu ul {
display:none;
}
ul.menu li:hover {
z-index:999;
}
ul.menu li:hover > ul {
display:block;
position:absolute;
float:left;
}
ul.menu li {
float:left;
width:auto;
}
ul.menu ul li {
float:left;
width:190px;
}
ul.menu ul li ul {
float:left;
width:190px;
position:absolute;
left:100%;
top:0;
}
ul.menu-ver,ul.menu-ver ul {
width:14em;
}
div.menu-center ul.menu {
float:left;
position:relative;
left:50%;
}
div.menu-center ul.menu li {
position:relative;
left:-50%;
}
div.menu-center ul.menu li li {
left:auto;
}
ul.menu li a {
border-bottom:1px outset ghostwhite;
}
ul.menu li a {
padding:8px 12px 10px;
}
ul.menu li a:link,ul.menu li a:hover,ul.menu li a:visited,ul.menu li a:active {
text-decoration:none;
border-bottom:1px outset black;
}
ul.menu li {
background: #45484d;
background: -moz-linear-gradient(top, #45484d 0%, #000000 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d), color-stop(100%,#000000));
background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%);
background: -o-linear-gradient(top, #45484d 0%,#000000 100%);
background: -ms-linear-gradient(top, #45484d 0%,#000000 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d', endColorstr='#000000',GradientType=0 );
background: linear-gradient(top, #45484d 0%,#000000 100%);
}
.menu-center {
float:right;
margin-right:95px;
}
ul.menu li a{
color:ghostwhite;
}
ul.menu li a:hover {
background: #efefef;
background: -moz-linear-gradient(top, #efefef 0%, #ffffff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#ffffff));
background: -webkit-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -o-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -ms-linear-gradient(top, #efefef 0%,#ffffff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#ffffff',GradientType=0 );
background: linear-gradient(top, #efefef 0%,#ffffff 100%);
color:black;
}
Puoi modificare il CSS per adattarlo ai tuoi gusti, ma questo dovrebbe darti un buon punto di partenza.
Modificato per la Compatibilità con WordPress 3.3:
Dopo l'aggiornamento all'ultima versione di WordPress (v3.3) sembra che i menu non funzionino se il tuo tema utilizza l'hook after_setup_theme e usi l'hook 'init' per registrare i menu.
La Soluzione:
Per questo esempio userò il nome yourtheme come nome_funzione.
Esempio di file functions.php:
<?php
if ( ! isset( $content_width ) )
$content_width = 610;
add_action( 'after_setup_theme', 'yourtheme_setup' );
if ( ! function_exists( 'yourtheme_setup' ) ):
function yourtheme_setup() {
// Aggiunge stili all'editor visivo (editor-style.css)
add_editor_style();
add_theme_support( 'automatic-feed-links' );
// Registra Menu Personalizzati
register_nav_menus(
array(
'main' => 'Menu Principale', // Traduzione: Menu Principale
'secondary' => 'Menu Secondario', // Traduzione: Menu Secondario
)
);
// Aggiunge miniature articoli e dimensioni immagini personalizzate
add_theme_support( 'post-thumbnails', array( 'post' ) );
// Aggiunge supporto per vari formati di articolo
add_theme_support( 'post-formats', array( 'aside', 'link', 'gallery', 'status', 'quote', 'image' ));
}
endif; // yourtheme_setup
/**
* Inizia il resto del codice del tuo file functions.php...
*
*/
?>
Guarda il file functions.php del Tema TwentyTen per vedere altre funzioni da includere nell'hook after_theme_setup.

Jeremy - Ho inserito quel codice nelle funzioni, ma non appare nel mio "menu" sotto aspetto. C'è un posto specifico in cui dovrei incollarlo??? Grazie!

Deve solo essere inserito nel file functions.php. Assicurati che il tuo tema non stia già usando 'register_my_menus'. Potresti provare a cambiarlo in 'register_my_custom_menus'. Basta cambiare entrambe le istanze. L'ho appena provato su un tema del repository che non aveva menu personalizzati e ha funzionato bene. Alcune domande per te: Il tuo tema attuale usa già menu personalizzati? È un tema che posso scaricare? Lo controllerò se è disponibile e se mi dà problemi.

@Megan di Fiterature: Sembra ci fosse un problema. Per qualche motivo quando l'ho testato sul mio sito usando l'installazione Beta di WordPress ha funzionato. Ho appena creato un nuovo sito, installato WordPress 3.3. È allora che ho notato che i menu non venivano registrati come hai detto tu. Vedi il codice sopra per la soluzione che ha risolto il problema per me.

Stavo facendo esattamente questo di recente. Non so quanto tu sia avanzato, quindi potresti già conoscere alcune di queste cose.
Ho trovato questo video molto utile (+ la sua seconda parte)
Penso che una delle ricerche originali fatte sia stata questa
Credo che Twenty Eleven utilizzi anche il plugin jquery superfish
Come ha menzionato l'altro utente, puoi trovare il codice di Twenty Eleven da qualche parte tra i file del tema
