Editar un menú de navegación
Los menús son pequeños, estructurados y muy visibles. Un error aquí aparece en todas las páginas del sitio, lo que hace que leer antes de escribir sea más valioso de lo habitual.
Las herramientas
| Herramienta | Hace |
|---|---|
wp_get_menus |
Lista los menús y sus ubicaciones asignadas |
wp_get_menu_items |
Lista los elementos de un menú |
wp_create_menu_item |
Añade un elemento |
wp_update_menu_item |
Cambia un elemento |
wp_delete_menu_item |
Elimina un elemento |
wp_reorder_menu_items |
Cambia el orden |
Las escrituras requieren Allow content writes abierto y edit_theme_options en el usuario que actúa: un listón más alto que editar entradas, lo que conviene saber al elegir al usuario que actúa.
Lee primero el menú completo
Lista los menús y luego muéstrame todos los elementos del menú principal con su ID, etiqueta, URL, padre y orden.
Dos razones por las que esto importa más que en otros contenidos:
- Los menús son jerárquicos. El padre de un elemento determina si aparece en la barra superior o dentro de un desplegable, y un asistente que no ha leído la estructura improvisará.
- Un menú es un todo. Cambiar el orden de un elemento afecta a las posiciones de los demás.
Confirma también qué menú estás editando. Un sitio suele tener varios —principal, pie de página, móvil— y sus nombres no siempre hacen evidente la asignación. wp_get_menus informa de las ubicaciones del tema a las que está asignado cada uno.
Añadir un elemento
Añade un elemento «Mantenimiento» al menú principal, que apunte a la página 88, como hijo de «Servicios», situado después de «Instalación».
Cuatro cosas que especificar: la etiqueta, el destino, el padre y la posición. Omitir el padre sitúa el elemento en el nivel superior; omitir la posición lo sitúa al final.
Comprueba que el destino se resuelve. Un elemento que apunta a una página en borrador genera un enlace a algo que los visitantes no pueden ver.
Reordenar
wp_reorder_menu_items cambia las posiciones. Como opera sobre el conjunto, lee primero el orden actual y enuncia el resultado deseado en lugar de un movimiento relativo:
Este es el orden que quiero: Inicio, Servicios, Proyectos, Acerca de, Contacto.
Una instrucción relativa —«sube Contacto una posición»— depende de la comprensión que el asistente tenga del orden actual, que es justamente lo que conviene evitar adivinar.
Eliminar un elemento
wp_delete_menu_item lo elimina. Esto no borra la página a la que apuntaba; solo elimina el enlace.
Comprueba primero si tiene hijos. Eliminar un elemento padre puede dejar huérfanos los elementos que tiene debajo, que desaparecen o ascienden al nivel superior según el tema. Lee la lista de elementos, anota los hijos y decide qué debe ocurrir con ellos.
Después de cualquier cambio en el menú
Los menús son lo único que merece la pena comprobar visualmente cada vez:
- Abre el sitio y mira el menú, en escritorio y en móvil.
- Comprueba que los desplegables se abren y que la jerarquía es la que pretendías.
- Comprueba que cada enlace modificado lleva a donde debe.
- Purga la caché. Los menús aparecen en todas las páginas, así que una caché obsoleta hace que un cambio correcto parezca roto.
Consulta Limpiar la caché de POM.
Sitios multilingües
En un sitio que usa Polylang, cada idioma suele tener su propio menú asignado a la misma ubicación. Cambiar uno no cambia los demás.
Lee wp_get_menus y confirma el menú de qué idioma tienes antes de editar, y luego planifica hacer el cambio equivalente en cada idioma.
Problemas comunes
| Síntoma | Causa |
|---|---|
pom_ai_mcp_forbidden |
El usuario que actúa carece de edit_theme_options |
| El elemento apareció en el lugar equivocado | El padre o la posición no se especificaron |
| Los subelementos desaparecieron | Se eliminó su padre |
| El orden no es el que pediste | Una instrucción relativa se interpretó contra un orden inicial distinto |
| El menú parece no haber cambiado | La caché no se purgó |
| Un idioma sigue mostrando el menú antiguo | Cada idioma tiene su propio menú |