Menú de navegación personalizado se crea con páginas predeterminadas, pero no se asigna a la ubicación del menú personalizado del tema

7 abr 2011, 00:06:56
Vistas: 1.65K
Votos: 0

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 );
0
Todas las respuestas a la pregunta 1
2

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 :)

7 abr 2011 02:48:25
Comentarios

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.

Scott B Scott B
7 abr 2011 03:56:00

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.

Scott B Scott B
7 abr 2011 19:05:35