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ú