Menú predeterminado de WordPress en la base de datos
Hay 3 menús en mi wordpress(3.5) ahora.
- Menú principal (predeterminado de wp)
- Menú de pie de página (predeterminado de wp)
- Menú de prueba
Ahora he mantenido el menú de prueba como predeterminado.
¿Dónde almacena WordPress esta información?
Quiero saber dónde almacena WordPress la información sobre el menú actual que se está mostrando en el frontend.

El menú en sí mismo es una taxonomía en WP. Esto significa que puedes encontrar todos los menús en la tabla wp_terms
, ejecutando la siguiente consulta:
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';
Los items de menú son un tipo de post personalizado en WP. Se almacenan en la tabla wp_posts
. Puedes encontrarlos todos usando esta consulta:
SELECT *
FROM wp_posts
WHERE post_type = 'nav_menu_item';
Las relaciones entre menús e items de menú se almacenan en la tabla wp_term_relationships
. Para encontrar todos los items de un menú específico puedes usar esta consulta:
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 = /*tu ID de menú*/;
La información sobre el menú actualmente seleccionado se encuentra en la tabla wp_options
como un array PHP serializado. Por ejemplo, si usamos el tema TwentyEleven, entonces tendremos un registro en la tabla wp_options
con la columna option_name
igual a theme_mod_twentyeleven
y la columna option_value
igual a ...;s:18:"nav_menu_locations";a:1:{s:7:"primary";i:103;}}
. Aquí puedes ver que el menú con term_id
igual a 103 está actualmente seleccionado como menú "primary"
.
El principio clave aquí es que siempre tenemos un registro de opciones separado para cada tema de WP. Estas opciones tienen la misma estructura de nombre: theme_mods_{nombre-de-tu-tema}
.
P.D.: Para cambiar el menú actual en el panel de administración, solo ve a la página Apariencia
» Menús
y selecciona el menú que necesitas en el meta caja Ubicaciones del Tema
:

Gracias por tu respuesta pero quiero saber dónde guarda el menú que está por defecto (mostrando al front end) ahora.

Sí, obtuve la respuesta. Estoy usando el tema hypershot y dejé el menú primario como menú de prueba. Se almacena así: 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;}} Aquí i:27 significa que 27 es el term_id de wp_terms. Gracias @eugene-manuilov :)
