register_nav_menus()
register_nav_menus() declara las zonas donde el tema puede mostrar menús de navegación. Una vez registradas, aparecen en Apariencia → Menús para que el usuario pueda asignar un menú a cada zona.
¿Dónde se llama?
Dentro del hook after_setup_theme, junto con el resto del setup del tema.
Registrar varias zonas a la vez
add_action( 'after_setup_theme', 'mi_tema_setup' );
function mi_tema_setup() {
register_nav_menus([
'primary' => __( 'Menú principal', 'mi-tema' ),
'secondary' => __( 'Menú secundario', 'mi-tema' ),
'footer' => __( 'Menú footer', 'mi-tema' ),
'mobile' => __( 'Menú móvil', 'mi-tema' ),
]);
}
Registrar una sola zona
register_nav_menu( 'primary', __( 'Menú principal', 'mi-tema' ) );
// Nota: register_nav_menu() (singular) para una zona
Mostrar el menú en la plantilla
// En header.php
wp_nav_menu([
'theme_location' => 'primary', // debe coincidir con el slug registrado
'menu_class' => 'nav-menu',
'container' => 'nav',
'container_class'=> 'site-navigation',
'fallback_cb' => false, // no mostrar nada si no hay menú asignado
]);
Comprobar si hay un menú asignado
if ( has_nav_menu( 'primary' ) ) {
wp_nav_menu([ 'theme_location' => 'primary' ]);
}
