Menu predefinito di WordPress nel database
Ho 3 menu nel mio WordPress (3.5) attualmente.
- Menu principale (predefinito da wp)
- Menu footer (predefinito da wp)
- Menu di test
Ora ho impostato il menu di test come predefinito.
Dove WordPress memorizza questa informazione?
Vorrei sapere dove WordPress memorizza l'informazione sul menu corrente che viene visualizzato nel frontend.
Il menu in sé è una tassonomia in WordPress. Ciò significa che puoi trovare tutti i menu nella tabella wp_terms
, eseguendo la seguente query:
SELECT *
FROM wp_terms AS t
LEFT JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id
WHERE tt.taxonomy = 'nav_menu';
Gli elementi del menu sono un tipo di post personalizzato in WordPress. Sono memorizzati nella tabella wp_posts
. Puoi trovarli tutti utilizzando questa query:
SELECT *
FROM wp_posts
WHERE post_type = 'nav_menu_item';
Le relazioni tra i menu e gli elementi del menu sono memorizzate nella tabella wp_term_relationships
. Per trovare tutti gli elementi di un menu specifico puoi usare questa query:
SELECT p.*
FROM wp_posts AS p
LEFT JOIN wp_term_relationships AS tr ON tr.object_id = p.ID
LEFT JOIN wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE p.post_type = 'nav_menu_item'
AND tt.term_id = /*ID del tuo menu*/;
Le informazioni sul menu attualmente selezionato si trovano nella tabella wp_options
come array PHP serializzato. Ad esempio, se utilizziamo il tema TwentyEleven, avremo un record nella tabella wp_options
con la colonna option_name
uguale a theme_mod_twentyeleven
e la colonna option_value
uguale a ...;s:18:"nav_menu_locations";a:1:{s:7:"primary";i:103;}}
. Qui puoi vedere che il menu con term_id
uguale a 103 è attualmente selezionato come menu "primary"
.
Il principio chiave qui è che abbiamo sempre un record di opzioni separato per ogni tema WordPress. Queste opzioni hanno la stessa struttura del nome: theme_mods_{nome-del-tuo-tema}
.
P.S.: Per cambiare il menu corrente nel pannello di amministrazione, basta andare nella pagina Aspetto
» Menu
e selezionare il menu desiderato nel box meta Posizioni del tema
:

Grazie per la tua risposta ma vorrei sapere dove memorizza il menu che è predefinito (mostrato al front end) ora.

Sì, ho ottenuto la risposta. Sto usando il tema hypershot e ho impostato il menu principale come menu di test. Viene memorizzato così a:2:{i:0;b:0;s:18:"nav_menu_locations";a:2:{s:11:"header-menu";i:27;s:11:"footer-menu";i:0;}} Qui i:27 significa che 27 è il term_id da wp_terms. Grazie @eugene-manuilov :)
