O Wordpress nos permite criar menus personalizados para serem exibidos no tema, de forma dinâmica. No entanto, é necessário informar ao Wordpress que seu tema tem suporte a eles, assim, conseguimos configurar diretamente pelo menu aparência.
Para informar ao wordpress que o tema dá suporte a menus, precisamos criar o arquivo functions.php na raiz do nosso tema. (Se o arquivo já existir não é necessários criar outro).
Sempre que precisamos informar algo específico par ao wordpress, é através desse arquivo de configurações específico. Nele são utilizadas as Actions Hooks do wordpress.
Cada ação que pode ser especificada, possuí uma Action específica que pode ser consultada neste link.
Para especificar uma ação, criaremos uma função que adiciona o menu que desejamos, e ao inicializar o wordpress, incluiremos a função que criamos para que o menu customizado seja exibido.
Para exemplificar, a função:
function meu_tema_personalizado_registrando_menu(){
register_nav_menu(
'menu-navegacao', //id para o menu poder ser referenciado no tema
'Menu Navegação' //nome para exibição
);
}
//informando ao wordpress qual momento executar nossa função personalizada
add_action('init', 'meu_tema_personalizado_registrando_menu');
Para especificar o local onde o menu deve aparecer, colocamos este código no header.php (para mais informações consulte documentação oficial)
wp_nav_menu(
array(
'menu' => 'menu-navegacao'
)
);
wp_nav_menu( array $args = array(
'menu' => "", // (int|string|WP_Term) Desired menu. Accepts a menu ID, slug, name, or object.
'menu_class' => "", // (string) CSS class to use for the ul element which forms the menu. Default 'menu'.
'menu_id' => "", // (string) The ID that is applied to the ul element which forms the menu. Default is the menu slug, incremented.
'container' => "", // (string) Whether to wrap the ul, and what to wrap it with. Default 'div'.
'container_class' => "", // (string) Class that is applied to the container. Default 'menu-{menu slug}-container'.
'container_id' => "", // (string) The ID that is applied to the container.
'fallback_cb' => "", // (callable|bool) If the menu doesn't exists, a callback function will fire. Default is 'wp_page_menu'. Set to false for no fallback.
'before' => "", // (string) Text before the link markup.
'after' => "", // (string) Text after the link markup.
'link_before' => "", // (string) Text before the link text.
'link_after' => "", // (string) Text after the link text.
'echo' => "", // (bool) Whether to echo the menu or return it. Default true.
'depth' => "", // (int) How many levels of the hierarchy are to be included. 0 means all. Default 0.
'walker' => "", // (object) Instance of a custom walker class.
'theme_location' => "", // (string) Theme location to be used. Must be registered with register_nav_menu() in order to be selectable by the user.
'items_wrap' => "", // (string) How the list items should be wrapped. Default is a ul with an id and class. Uses printf() format with numbered placeholders.
'item_spacing' => "", // (string) Whether to preserve whitespace within the menu's HTML. Accepts 'preserve' or 'discard'. Default 'preserve'.
) );