Login
Andre Publicado em 10/01/2021, atualizado em 11/01/2021
Snippets WordPress

Criar array de menu que liste itens filhos no WordPress

Durante o desenvolvimento de um tema customizado para um cliente, precisei criar um array com todos os itens de um menu criado na estrutura do WordPress (Aparência > Menus).

Tranquilo! Consigo codificar menu customizado utilizando a função WordPress wp_get_nav_menu_items() e iterando pelos itens da array.

Mas como faz na hora de pegar os itens filhos para a criação de um submenu?

Cada item do menu tem uma propriedade chamada menu_item_parent com o ID do item pai. Mas acredita que o item pai não tem uma propriedade que lista quais são os filhos? 🤔

Depois de algumas horas tentando codificar alguma saída (na gambiarra mesmo) acabei chegando em uma solução boa – mas seria mais fácil se a função WordPress wp_get_nav_menu_items() mostrasse o número de itens filhos.

Após algumas pesquisas, encontrei esta postagem no Stack Overflow com um código completo – que é uma solução bem melhor que a minha gambiarra. 😅

A partir da postagem fiz a seguinte função:

// Criar array de menu com lista de filhos function menu_mobile( $menu = 'menu' ) { $menu = wp_get_nav_menu_items( $menu ); $child_items = []; foreach ($menu as $key => $item) { if ($item->menu_item_parent) { array_push($child_items, $item); unset($menu[$key]); } } foreach ($menu as $item) { foreach ($child_items as $key => $child) { if ($child->menu_item_parent == $item->post_name ) { if (!$item->child_items) { $item->child_items = []; } array_push($item->child_items, $child); unset($child_items[$key]); } } } return $menu; }
Code language: PHP (php)

Utilize a função menu_mobile() e coloque o slug do menu criado no WordPress, por exemplo:

<?php menu_mobile( 'menu-principal' ); ?>
Code language: HTML, XML (xml)

Pronto, agora você tem uma array de menu que liste os itens filhos no WordPress – e pode desenvolver o seu menu customizado mais rápido. 🙂

Observação importante para evitar frustrações: o item do menu pai precisa ser uma página WordPress com ID e não um kink personalizado, porque o menu_item_parent pega o ID referente da página – e links personalizado não têm ID.

Caso o item pai não tenha ID, a propriedade child_items do objeto não existirá e seus filhos não aparecerão.

Os itens filhos do menu podem ser links personalizados sem problemas.

Deixe uma resposta

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