start_el()
deve obter essas informações em seu $args
parâmetro, mas parece que o WordPress preenche isso apenas se $args
for uma matriz , enquanto para os menus de navegação personalizados é um objeto. Isso é relatado em um ticket Trac . Mas não há problema, você pode preencher isso sozinho, se você também substituir o display_element()
método em seu andador personalizado (porque este é o lugar mais fácil para acessar a matriz de elementos filho):
class WPSE16818_Walker extends Walker_Nav_Menu
{
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
{
$id_field = $this->db_fields['id'];
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
function start_el( &$output, $item, $depth, $args ) {
if ( $args->has_children ) {
// ...
}
}
Atualização: a partir do WordPress 3.7 (outubro de 2013), as classes CSS foram adicionadas para indicar itens e páginas do menu filho nos menus de temas - não é necessário usar um andador personalizado, como é tratado no núcleo do WordPress.
As classes CSS são nomeadas
menu-item-has-children
epage_item_has_children
.Para uma solução completa para qualquer pessoa com pressa (crédito à resposta anterior de Jan Fabry), consulte a implementação completa abaixo.
Crie a navegação no modelo do seu tema:
Em seguida, inclua o seguinte no tema
functions.php
:A saída HTML resultante será semelhante ao seguinte:
Para obter mais informações sobre o uso da classe walker do WordPress, consulte Noções básicas sobre a classe Walker .
Apreciar!
fonte
Esta função é exatamente o que você deseja ter. Também mostra uma maneira bastante eficaz de modificar os itens do menu de navegação. Além disso, você pode abri-lo para funções mais avançadas (por exemplo, tema filho) através do filtro de itens:
E sim, não há - em quase todos os casos - a necessidade de um andador personalizado.
fonte
se você quiser fazer o menu suspenso, poderá fazê-lo apenas com css. Para fazer uma navegação personalizada no WP com filhos, o WordPress atribui automaticamente a classe .sub-menu ao filho ul. Experimente este CSS
Você pode adicionar algum jQuery para incrementá-lo um pouco, mas isso deve fornecer um menu suspenso.
fonte
fonte