Menú de navegación personalizado se crea con páginas predeterminadas, pero no se asigna a la ubicación del menú personalizado del tema
El siguiente script crea un menú de navegación y le asigna una página. Todo funciona perfectamente excepto que el menú no se asigna automáticamente a la ubicación "Header-menu" de mi tema.
¿Alguna idea de por qué ocurre esto?
//Registrar ubicaciones de menú para el tema
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array('header-menu' => __( 'Menú de cabecera' ), 'footer-menu' => __( 'Menú de pie de página' ))
);
}
//Crear un menú de navegación, añadir una página y asignarlo a la ubicación "header-menu" del tema.
$menu_id = wp_create_nav_menu( 'header-menu' );
$menu = array(
'menu-item-type' => 'custom',
'menu-item-url' => get_home_url('/'),
'menu-item-title' => 'Inicio',
'menu-item-status' => 'publish',
'theme_location' => 'header-menu', //Un intento pero no funcionó!!!
);
wp_update_nav_menu_item( $menu_id, 0, $menu );

La función wp_create_nav_menu()
acepta el nombre del menú y no la ubicación del menú.
En cuanto a wp_update_menu_item()
, esta es para los elementos del menú y no para el menú en sí.
Después de investigar en el código, descubrí que la "asignación" de la 'ubicación del tema' a un menú no se realiza utilizando la API de nav_menu en WordPress, sino con las opciones del tema, por lo que:
//primero obtenemos el tema actual
$theme = get_current_theme();
//obtenemos las modificaciones del tema
$mods = get_option("mods_$theme");
//actualizamos las modificaciones con el ID del menú en la ubicación del tema
$mods['nav_menu_locations']['header-menu'] = $menu_id;
update_option("mods_$theme", $mods);
Espero que esto ayude :)

Eres una estrella de rock. No me extraña que no pudiera encontrarlo. Si tuviera un botón de +20, lo estaría presionando con fuerza.

tu sugerencia me ha acercado mucho más a una solución y la estoy seleccionando como la respuesta. Sin embargo, todavía no asigna el menú a la ubicación del menú. Estoy recibiendo algunos errores de seguimiento sobre que $menu_id ya existe. Así que, lo estoy publicando como una pregunta separada.
