wordpress – menús específicos para una página específica

3 minutos de lectura

¿Puedo especificar diferentes menús para diferentes páginas en wordpress?

Digamos que tengo las páginas A, B, C, D y tengo los menús menu1, menu2. Quiero que la página A, B cargue el menú 1 y C, D para cargar el menú 2.

¿¿Es posible?? ¡Gracias!

Puedes hacer esto de muchas maneras,

usando la identificación de la página

if(is_page(array('1','2'))) { 

wp_nav_menu( array('menu' => 'menu1' ));

} else { 

wp_nav_menu( array('menu' => 'menu2' ));
} 

Usar una plantilla de página especial.

si tienes especial plantilla de página(page-id o page-slug) para la página A y B, luego puede llamar

wp_nav_menu( array('menu' => 'menu1' ));

para otras paginas

puedes usar en page.php

 wp_nav_menu( array('menu' => 'menu1' ));

Usando Widget también puedes hacer esto

La mejor solución sería permitir que un usuario elija la ubicación del menú de navegación al agregar/editar una página.

Use un cuadro meta con un menú desplegable (seleccione) con todas las ubicaciones disponibles y luego guarde la ubicación seleccionada en un campo personalizado:

/**
 * Register the meta box.
 */
function wpse_183868_page_nav_menu_meta_box_register() {
    add_meta_box(
        'wpse_183868_page_nav_menu',
        'Nav Menu',
        'wpse_183869_page_nav_menu_meta_box',
        'page',
        'side'
    );
}

add_action( 'add_meta_boxes', 'wpse_183868_page_nav_menu_meta_box_register' );

/**
 * Display the meta box.
 */
function wpse_183869_page_nav_menu_meta_box( $post ) {
    $selected = get_post_meta( $post->ID, '_page_nav_menu', true );
    wp_nonce_field( 'save', 'page_nav_menu_nonce' );
    ?>

<select name="page_nav_menu">
    <?php foreach ( get_registered_nav_menus() as $name => $label ) : ?>
         <option value="<?php echo $name ?>"<?php selected( $name, $selected ) ?>><?php echo $label ?></option>
    <?php endforeach ?>
</select>

<?php
}

/**
 * Save the meta box data.
 */
function wpse_183869_page_nav_menu_save( $post_id ) {
    if ( ! isset( $_POST['page_nav_menu'], $_POST['page_nav_menu_nonce'] ) || ! wp_verify_nonce( $_POST['page_nav_menu_nonce'], 'save' ) )
        return;

    $nav_menus = get_registered_nav_menus();
    $nav_menu = $_POST['page_nav_menu'];

    if ( isset( $nav_menus[ $nav_menu ] ) ) // Paranoid - check the submitted value is definitely valid
        update_post_meta( $post_id, '_page_nav_menu', $nav_menu );
}

add_action( 'save_post', 'wpse_183869_page_nav_menu_save' );

Ahora en tu plantilla solo puedes usar:

if ( ! $page_nav_menu = get_post_meta( get_the_ID(), '_page_nav_menu', true ) )
    $page_nav_menu = 'default_location';

wp_nav_menu( array( 'theme_location' => $page_nav_menu ) );

Puedes usar Intercambiador de menús complemento para hacer lo mismo usando la interfaz de usuario de administrador. Aquí está el Manifestación de este complemento.

  • Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página enlazada cambia. – De la revisión

    – Milap

    22 de abril de 2016 a las 13:46

  • Estoy de acuerdo con @milap pero ese enlace es del complemento de wordpress que es adecuado para esta respuesta. No creo que wordpress cambie esa URL o incluso tú harás lo mismo.

    – hmjha

    22 de abril de 2016 a las 14:23

  • Lo que quiero decir es que no puede publicar un enlace como respuesta, siempre puede publicar un comentario sobre la pregunta. Según los términos.

    – Milap

    22/04/2016 a las 15:00


¿Ha sido útil esta solución?