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' ]);
}