Menú personalizado por defecto en un nuevo tema WordPress

menu personalizado wordpress

Los menús personalizados son una de las maravillas de WordPress que, desde hace varias versiones, nos permiten personalizar nuestro tema sin necesidad de tocar código.

Para el usuario final hasta aquí bien …

Pero también para los desarrolladores de temas son una oportunidad, aunque a veces también un problema, afortunadamente con solución.

Me refiero a que si desarrollas tu tema y en el código defines un menú, en cuando el usuario elabore su propio menú personalizado «matará» tu código, perdiendo algunas utilidades que le podrían gustar, o incluso ser imprescindibles, como enlaces a Twitter o incluso a la suscripción por RSS, todo con unas bonitas clases CSS o iconos.

Así que hace falta algo de reciclaje también para el desarrollador de temas WordPress y, para evitar esto, empezar a incorporar desde ya menús personalizados por defecto en sus temas.

Si estás animado entonces lo que tendrás que empezar a hacer es incluir en el fichero functions.php de tu tema algo como lo de este ejemplo:

/*-----------------------------------------------------------------------------------*/
/* Menú personalizado y activo por defecto
/*-----------------------------------------------------------------------------------*/

add_action('load-themes.php', 'aw_register_custom_menu');

function aw_register_custom_menu() {
  register_nav_menu( 'main_menu', __('Menú principal') );

  if ( isset( $_GET['activated'] ) && $_GET['activated'] ) {
    if ( !is_nav_menu( 'Menú principal' ) ) {
      $menu_id = wp_create_nav_menu( 'Menú principal' );

      $menu_home = array( 'menu-item-type' => 'custom', 'menu-item-url' => get_home_url('/'),'menu-item-title' => 'Inicio', 'menu-item-attr-title' => 'Home' );
      $menu_twitter = array( 'menu-item-type' => 'custom', 'menu-item-url' => get_home_url('/'),'menu-item-title' => 'Twitter', 'menu-item-attr-title' => 'Twitter', 'menu-item-classes' => 'twitter' );
      $menu_subscribe = array( 'menu-item-type' => 'custom', 'menu-item-url' => get_home_url('/'),'menu-item-title' => 'Suscripción', 'menu-item-attr-title' => 'Suscripción', 'menu-item-classes' => 'subscribe' );

      wp_update_nav_menu_item( $menu_id, 0, $menu_home );
      wp_update_nav_menu_item( $menu_id, 0, $menu_twitter );
      wp_update_nav_menu_item( $menu_id, 0, $menu_subscribe );

      set_theme_mod( 'nav_menu_locations', array(
        'main_menu' => $menu_id,
      ) );
    }
  }
}

Huelga decir que deberás modificar el código para que se ajuste a tus necesidades y gustos, igual que crear las clases CSS adecuadas, pero esa es la idea.

Lo que obtienes es que cuando un usuario o cliente active tu tema ya tendrá activo tu menú personalizado por defecto y así, en vez de borrar lo que había, lo podrá personalizar igualmente a su gusto, pero sin perder el «feeling» que tu le imprimiste en tu código.

Mucho mejor ¿no?

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(1 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

7 comentarios en “Menú personalizado por defecto en un nuevo tema WordPress”

  1. La idea me parece genial, sólo tengo una pregunta.

    Si quisiera agregar más que un único menú,  en la línea 8, agregaría varios register_nav_menu

    register_nav_menu( ‘main_menu’, __(‘Menú principal’) );
    register_nav_menu( ‘secondary_menu’, __(‘Menú Secundario’) );
    register_nav_menu( ‘third_menu’, __(‘Menú Lateral’) );

    Pero me pierdo un poco en cómo agregar más bloques en las siguientes líneas, debería agregar algunos elseif, o algo más?

    Agradezco la ayuda.

  2. Hola pues yo tengo un tema antiguo que quiero editar para añadirle soporte para los menus pero no tengo manera. Si meto este codigo (y otros muchos que he encontrado que rezan hacer lo mismo) en la web me aparece el codigo en si.

    Tengo un post en los foros de ayuda wordpress solicitando ayuda por si me podeis ayudar:

    Salu2

  3. Hola he cerado 5 paginas que aparecen en el menú principal, pero tengo que crear algunas más que no deseo que aparezcan en el mismo. Con mi tema el menu personalizado de WP no funciona, no pongo barra lateral, ni quiero un menú allí y no sé que puedo hacer para que no salgan las nuevas págnas que creo en el menú principal. El código de header es el siguiente:

    post->ID;
    $pages = get_pages(‘sort_column=menu_order’);
    //$pages = get_pages();
    foreach ($pages as $pagg) {
    if ($page_id==$pagg->ID) {
    $menu = ‘ID).'» class=»current»>’;
    }
    else {
    $menu = ‘
    ID).'»>’;
    }
    $menu .= $pagg->post_title;
    $menu .= ‘
    ‘;
    echo $menu;
    }
    ?>

    Los códigos que hay por varios sitios no me sirven con este tema.
    A ver si alguien puede solucionar esto.
    Saludos!

  4. Hola, he comprado un theme y estoy tratando de ordenar los menus personalizados pero no me permite ordenar los menus, cada vez que hago una estructura al guardar todo se cambia. ¿Alguien podria ayudarme con esto? Muchas gracias de antemano.

  5. Gabriel Flores Olea

    Muy buena explicación, sin embargo, ¿cómo llamo la función desde el header.php que es donde quiero colocar el menú? Me dice que el tema no soporta menús ni widgets. Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido