¿Dónde se guardan los menús personalizados en la base de datos de WordPress 3.0?

7 minutos de lectura

He estado buscando y buscando en mi base de datos sql en phpmyadmin pero parece que no puedo encontrar dónde se almacenan los menús personalizados en la base de datos. Alguien sabe donde esta guardado? Básicamente, tengo un menú grande que lleva una eternidad crearlo. Estoy en desarrollo ahora y en lugar de recrearlo en producción, quiero intentar copiar el sql para ver si funciona. ¡Gracias!

avatar de usuario
Hiren Rathod

Cuando se agrega un nuevo menú personalizado, su entrada se agrega a varias tablas.

  1. mesa: _term_taxonomy con una columna taxonomy y valor nav_menu.
  2. de 1) term_id también está en la tabla:_terms con el título del menú que se muestra en el panel de administración
  3. mesa:_term_relationship contendrá term_texonomy_id desde 1) y conexión a todos los object_id que se vincularán a todos _post mesa teniendo sub_menu y por debajo del menú de nivel.
  4. mesa:_postmeta contendrá todos los detalles relacionados con el menú y el submenú para cada object_id de _posts mesa.

  • No entiendo cómo esto no se vota a favor. Estaba buscando una forma de exportar e importar los menús. Sé mi respuesta. No. Lo haré manualmente.

    – toto_tico

    4 de julio de 2013 a las 4:47

  • Debería aclarar el paso 3 para decir que object_id de term_relationships es igual al campo id de wp_post

    – Miguel

    22 de diciembre de 2014 a las 23:54

  • Desinstalé WP Fastest Cache y después de terminar el proceso de desinstalación dejé una entrada en el menú de la izquierda y no puedo encontrarla en ninguna parte de las tablas que dices…

    – Pato

    28 de noviembre de 2017 a las 1:07

avatar de usuario
Todd Moisés

Los elementos del menú de navegación se almacenan en la tabla wp_posts con post_type="nav_menu_item".

  • Pero, ¿qué tipo de publicación personalizada?

    – Adán F.

    30 de mayo de 2013 a las 15:08

  • qué mal está esto, wordpress infla las tablas _posts y _options arrojando todo tipo de cosas allí que deberían colocarse en una tabla separada para una mejor administración de la base de datos y velocidad de carga

    – Daniel Tulp

    23/10/2013 a las 12:00

  • Sí, la base de datos está muy mal normalizada y esta respuesta es solo parcialmente correcta. Identifica los objetos que componen el menú, pero no proporciona los valores (p. ej., texto del menú) asociados con el menú. Todavía estoy cavando para tratar de encontrar esos datos.

    – Bob Jones

    30 de marzo de 2014 a las 5:28

Los títulos de menú, ID y nombres reales se almacenan en la tabla wp_terms.

  • $menu_list = get_terms('nav_menu'); devolverá todos los menús.

    – yitwail

    15 de agosto de 2011 a las 19:16

  • Esta consulta devuelve solo el ID del menú. ¿Qué consulta devuelve cada elemento del menú con suficiente información para regenerar el menú?

    – Bob Jones

    30 de marzo de 2014 a las 5:38

  • Una vez que tenga la identificación del menú, puede ejecutar $wp_menu_items = wp_get_nav_menu_items( $id );

    – Sara

    11/03/2019 a las 19:30

avatar de usuario
jay d

Odio volver a un hilo viejo. Pero si alguien se encuentra con esto como lo hice yo buscando la respuesta, a partir de WP 3.2 la post_type para el menú ahora se llama nav_menu_item en el wp_posts mesa. No tenían eso en la página de wp, solo tenían nav_menu. Que no pude encontrar.

avatar de usuario
mandril reynolds

Los enlaces del menú personalizado están en el wp_postmeta mesa debajo "meta_value"
meta_key = _menu_item_url

  • Verificar Respuestas de WordPress, el sitio de preguntas y respuestas de WordPress de Stack Exchange. Sería genial si pudieras compartir algo de tu experiencia. ¡Por cierto, WordCamp Phoenix fue genial!

    – Chris_O

    19 mayo 2011 a las 23:40

  • @Chris_O ¡Hola, tío! gracias. Lo he visto. Rara vez me pongo en la pila… sitios. Debería intentar pasar el rato allí más a menudo :/ #toobusy

    -Chuck Reynolds

    27 de mayo de 2011 a las 5:10

  • @Chris_O para tu información, tengo una cuenta allí: wordpress.stackexchange.com/users/2173/ryno

    -Chuck Reynolds

    27 de mayo de 2011 a las 5:11

avatar de usuario
doyle lewis

Quería proporcionar una respuesta más completa y actualizada para las personas que se topan con esta publicación como lo hice yo. Hay varios lugares en la base de datos que deben verificarse/actualizarse si desea insertar o actualizar manualmente los elementos del menú.

El primer paso es encontrar el contenedor del menú principal. Esto se almacena en wp_terms. solo busca por name para el nombre de su menú. Toma nota del DNI. En mi ejemplo esto será 33. Del mismo modo, podría insertar una nueva fila aquí para crear un nuevo menú. La babosa no puede tener espacios en ella. Solo reemplaza en - en cambio.

Ahora vamos a buscar elementos en ese menú. Esos se almacenan en wp_posts con un post_type de nav_menu_item. No hay nada en esta tabla que lo vincule con su identificación anterior, por lo que tendrá que seguir post_title. Si el objetivo es insertar un nuevo elemento de menú, con phpMyAdmin puede hacer clic en Copy en un elemento existente en cualquier menú y cambiar post_title y post_name. Ahora tome nota de la identificación del artículo que insertó. El mío es 9179. También será bueno tomar nota de la ID del elemento que copió (incluso mejor si fue del mismo menú), ya que la usaremos en el siguiente paso.

ahora ve a wp_postmeta y busca en el post_id campo para el elemento que acabamos de copiar. Esto mostrará todos los campos que deben completarse para obtener la información de nuestro nuevo elemento de menú. Usando phpMyAdmin, copie cada una de esas entradas y cámbielas según sea necesario. _menu_item_menu_item_parent, _menu_item_targety _menu_item_classes son los campos que probablemente necesitarán cambios. Y asegúrese de poner el ID de su nuevo artículo (9179) en _menu_item_object_id.

Una vez que se hayan creado todos, ahora podemos vincular ese elemento del menú a nuestro menú. Necesitamos conseguir el term_taxonomy_id de wp_term_taxonomy. solo busca term_id usando la identificación del primer paso, 33 para mí. los term_taxonomy_id pasa a ser 33 para mí también. No, necesitamos insertar una nueva fila en wp_term_relationships. object_id será su ID de publicación (9179) y term_taxonomy_id es lo que acabamos de buscar (33).

Ahora su nuevo artículo debería estar en su menú.

  • Verificar Respuestas de WordPress, el sitio de preguntas y respuestas de WordPress de Stack Exchange. Sería genial si pudieras compartir algo de tu experiencia. ¡Por cierto, WordCamp Phoenix fue genial!

    – Chris_O

    19 mayo 2011 a las 23:40

  • @Chris_O ¡Hola, tío! gracias. Lo he visto. Rara vez me pongo en la pila… sitios. Debería intentar pasar el rato allí más a menudo :/ #toobusy

    -Chuck Reynolds

    27 de mayo de 2011 a las 5:10

  • @Chris_O para tu información, tengo una cuenta allí: wordpress.stackexchange.com/users/2173/ryno

    -Chuck Reynolds

    27 de mayo de 2011 a las 5:11

avatar de usuario
codificar

Aquí están los scripts SQL que usé:

Obtenga los menús de la tabla wp_term:

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'

Utilice term_id para obtener todos los títulos/enlaces de menú de todas las demás tablas conectadas. En mi opinión, esta es una base de datos relacional terrible. Simplemente reemplace el tt.term_id con el suyo de la consulta anterior, a continuación es 11.

SELECT p.post_title, p.post_name, p.menu_order, pm.meta_value 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 INNER JOIN wp_postmeta AS pm ON p.Id = pm.post_id WHERE p.post_type="nav_menu_item" AND tt.term_id = 11 AND pm.meta_key = '_menu_item_url'

¿Ha sido útil esta solución?