Autor Categorias Comentários17 Comentários

Uma dúvida que volta e meia recebo dos alunos do meu curso de desenvolvimento de temas com WordPress diz respeito a adicionar o famoso menu sanduíche no tema. Durante o curso eu prefiro usar um plugin para adicionar esse menu, tanto por razões didáticas quanto para otimizar a duração do curso. Mas existem aqueles que, com razão, não gostam de adicionar muitos plugins aos temas, querendo saber como fazem para adicionar um menu Bootstrap a um tema WordPress.

Para esses, felizmente, existe uma forma bastante fácil de adicionar o menu responsivo, usando uma classe chamada WP Bootstrap Nav Walker. Essa classe é totalmente compatível com as diretrizes de criação de temas do próprio WordPress. Quer dizer que você pode adicionar no seu tema tranquilamente caso o seu desejo seja enviar o tema para o repositório do WordPress, ou mesmo para o ThemeForest da Envato.

A classe já está otimizada para uso com a versão 4 do Bootstrap, mas também existe uma versão dela para Bootstrap 3.

Aqueles que preferem ver um tutorial em vídeo podem assisti-lo logo abaixo:

Certo, vamos começar então…

Como Adicionar um Menu Bootstrap a um Tema WordPress

A primeira coisa que você vai precisar para que esse tutorial funcione é registrar o seu menu no arquivo functions.php.

Então, caso ainda não tenha uma posição de menu disponível, abra lá o seu arquivo functions.php e adicione o seguinte:

// Registrando um menu
register_nav_menus(
    array(
        'meu_menu' => __( 'Menu Principal', 'meu-text-domain' )
    )
);

Baixe uma cópia do arquivo class-wp-bootstrap-navwalker.php visitando a página do projeto em https://github.com/wp-bootstrap/wp-bootstrap-navwalker (para o Bootstrap 3, o link é https://github.com/wp-bootstrap/wp-bootstrap-navwalker/tree/v3-branch).

Coloque uma cópia deste arquivo (somente dele, ok) dentro da pasta do seu tema. Pode ser, por exemplo, dentro de algum outro subdiretório que você queira criar. Para este tutorial eu criarei um subdiretório chamado inc dentro do diretório principal do meu tema.

Chame o arquivo dentro do arquivo functions.php deste jeito:

// Register Custom Navigation Walker 
require_once get_template_directory() . '/inc/class-wp-bootstrap-navwalker.php';

A T E N Ç Ã O: Se estiver usando Bootstrap 3, o nome do arquivo é somente wp-bootstrap-navwalker.php.

A T E N Ç Ã O 2: este menu não funciona ainda com Bootstrap 5! Caso tente usar com Bootstrap 5, o menu não será clicável.

Um detalhe importante é que essas linhas de código devem ficar logo no início do seu arquivo functions.php, ok?

Agora, basta você achar o ponto do tema onde quer adicionar o menu, que geralmente é o arquivo header.php. Você vai usar pra isso a função wp_nav_menu(), só que vamos passar alguns parâmetros a mais dentro do array da função. Ela vai ficar da seguinte forma:

wp_nav_menu( array(
    'theme_location'    => 'meu_menu',
    'depth'             => 2,
    'container'         => 'div',
    'container_class'   => 'collapse navbar-collapse',
    'container_id'      => 'bs-example-navbar-collapse-1',
    'menu_class'        => 'nav navbar-nav',
    'fallback_cb'       => 'WP_Bootstrap_Navwalker::fallback',
    'walker'            => new WP_Bootstrap_Navwalker(),
) );

Os argumentos que vêm logo após o theme_location (usada para você indicar o identificador do seu menu) servirão pra construir a marcação HTML do menu responsivo exatamente como o Bootstrap exige:

  • depth: indica a profundidade do menu. O valor 1 significa que não vai existir um dropdown. Já o valor 2 significa o contrário.
  • container: indica o elemento HTML que servirá como container para o menu. O menu Bootstrap exige um elemento do tipo <div>.
  • container_class: indica a classe do elemento container, que no nosso caso é uma <div> conforme expliquei acima.
  • container_id: id da div, conforme a marcação do Bootstrap.
  • menu_class: classe para ser adicionada ao elemento <ul> do menu.
  • fallback_cb: chama o método fallback dentro da classe do WP Boostrap Nav Walker que você adicionou no tema. Ele só será invocado caso nenhum outro menu esteja assinalado para a posição de menu corrente. Por padrão, esse argumento chama o menu de páginas interno do WordPress caso a posição de menu não esteja ocupada. Aqui nós só substituímos o comportamento padrão pela chamada do menu nav walker da classe nova.
  • walker: chama uma nova instância da classe WP_Bootstrap_NavWalker, que extende a classe Walker_Nav_Menu padrão.

A marcação completa do seu menu deverá ficar mais ou menos assim:

<nav class="navbar navbar-expand-md navbar-light bg-light" role="navigation">
    <div class="container">
        <!-- Brand and toggle get grouped for better mobile display -->
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-controls="bs-example-navbar-collapse-1" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <a class="navbar-brand" href="<?php echo home_url(); ?>">
            <?php bloginfo('name'); ?>
        </a>
        <?php
        wp_nav_menu( array(
            'theme_location' => 'meu_menu',
            'depth' => 2,
            'container' => 'div',
            'container_class' => 'collapse navbar-collapse',
            'container_id' => 'bs-example-navbar-collapse-1',
            'menu_class' => 'nav navbar-nav',
            'fallback_cb' => 'WP_Bootstrap_Navwalker::fallback',
            'walker' => new WP_Bootstrap_Navwalker())
        );
        ?>
    </div>
</nav>

Com isso feito você pode incluir alguma classe customizada. Por exemplo, você pode adicionar classes Bootstrap ao argumento menu_class.

Você pode também substituir o nav-bar-brand por algo mais customizado. O resultado será algo mais ou menos parecido com isso (menu aberto):

Como Adicionar um Menu Bootstrap a um Tema WordPress

É isso! Espero que este tutorial possa ter sido útil!

Agora, se você quer se aprofundar nesse tema, te convido a conhecer nosso curso sobre criação de temas WordPress. Depois de terminar o curso, assuntos como os desse post vão ficar incrivelmente fáceis pra você.

Clique aqui e comece a ver as primeiras aulas de graça agora mesmo!

NÃO PERCA A CHANCE

Aprenda a criar o seu próprio tema WordPress GRATUITAMENTE AINDA HOJE.

Não fazemos spam! Leia nossa política de privacidade para mais informações.

Aprendiz de violeiro, amante do rádio, falador de grego moderno e outras línguas humanas e não humanas (PHP e afins). É formado em Análise de Sistemas e trabalha com desenvolvimento web desde 2008, inicialmente com foco em Joomla. Vem se especializando na construção de temas com WordPress desde 2012, tendo construído dezenas de sites com ele. É autor dos livros "WordPress para Desenvolvedores" e "The Web Developer's Guide to WordPress", além de instrutor de cursos online sobre WordPress, com quase 20 mil dedicados alunos.

17 respostas para “Como Adicionar um Menu Bootstrap a um Tema WordPress?”

  1. Marcelo deu certinho a inclusão do menu, mas acontece que ele aparece apenas com 1 submenu. Quando coloco outros submenus eles não aparecem. Em depth marquei para receber 3 ou mais o que pode estar errado?

    • Marcelo Vieira disse:

      Flavio, é que este menu dropdown que eu sugiro aqui é para apenas um nível de submenu. Para ter mais, teria que ajeitar o CSS para que os outros níveis aparecessem corretamente. Não adianta somente habilitar o depth e passar mais níveis. Como eu não conheço seu código, não sei como te ajudar no momento. Mas dê uma procurada na web sobre o CSS necessário para habilitar menus com mais de 1 nível de submenu.

  2. Gostei muito do recurso e da aula: didática, objetiva e prática. Tenho dois menus de navegação no cabeçalho do site que estou construindo, os dois menus estão registrados no arquivo functions.php do WordPress. Como posso fazer isso utilizando o WP Bootstrap Navwalker em cada um? Obrigado por me responder. Abraço.
    Abraço e obrigado.

    • Marcelo Vieira disse:

      Olha, seria só questão de duplicar o código e fazer as alterações devidas nos arquivos PHP e CSS.
      O que você tem que se atentar é no identificador do menu no functions.php. Cada menu tem um identificador (também chamado de posição ou de theme_location). Cada um dos menus tem que ter o seu.
      Também preste atenção no valor do argumento “container_id”. Ele deve ser sempre o mesmo que você indicar no button do menu, mais especificamente nos atributos data-target e aria-controls.
      Fazendo isso dá pra controlar mais de um menu de forma independente, não importa em que lugar do tema eles estejam.

  3. Ótima aula! Uma dúvida como seria inserir mais de uma linha de menu? É possível?
    Abraço e obrigado.

  4. Jonatan disse:

    Quanto aos problemas com o menu responsivo, para funcionar corretamente data-target=”#bs-example-navbar-collapse-1″ deve ser igual ao valor do item ‘container_id’ => ‘bs-example-navbar-collapse-1’, sem as #.

  5. Marcelo Luiz Lubasinski disse:

    Estou com o mesmo problema do Marcelo Vieira, o menu colapsa, você clica ele não abre, bootstrap 4.4.1 e jquery 3.6.0

    • Marcelo Vieira disse:

      Oi, xará! Já deu uma olhada no Console da Ferramenta de Desenvolvedor? Aperte Control+Shift+I ou F12 e veja se tem alguma mensagem de erro no Console. Certamente terá alguma para te guiar e ajudar a ver onde o problema está. Se precisar de ajuda, me diga.

  6. Vanderlei da silva disse:

    Estou tentando colocar o menu porém ele no responsivo clico na toggle e ele nao parece o menu 🙁

    • Marcelo Vieira disse:

      Vanderlei, você está usando Bootstrap 4 ou 5 no seu código? Este menu só funciona com Bootstrap 4. Talvez seja este o problema. Já recebi essa mesma reclamação de alguns alunos e acabei descobrindo isso. É que o WP Bootstrap Navwalver ainda não está disponível para a versão 5.

  7. Lucas disse:

    Muito bom o tutorial! Parabéns pelo blog

  8. Jefferson disse:

    Meu site da erro condo coloco a função require_once get_template_directory_uri() . ‘/inc/class-wp-bootstrap-navwalker.php’;

    • Marcelo Vieira disse:

      Jefferson, desculpa, pois só vi seu comentário agora. Ainda está com o erro? Tem que passar detalhes do erro pra eu poder ajudar.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.