Adicione div ao submenu específico

Eu pesquisei no google, yandex, mas não tive sucesso.

Com este código, eu posso definir um div para sub-menu, mas este código adiciona a todos os sub-menus, eu só preciso adicionar div para um sub-menu específico.

class Megratron_div extends Walker_Nav_Menu { function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
\n"; } }

Como eu posso fazer isso?

Eu realmente aprecio o seu apoio.

Solutions Collecting From Web of "Adicione div ao submenu específico"

A class Walker nativa do WordPress não passa os argumentos que você precisa para o método start_lvl() . Então, para fazer isso, você precisará adicionar um método display_element() personalizado ao seu walker personalizado. Você pode usar a maior parte do original, com algo semelhante à seção comentada abaixo:

 public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) { if ( ! $element ) { return; } $id_field = $this->db_fields['id']; $id = $element->$id_field; //display this element $this->has_children = ! empty( $children_elements[ $id ] ); if ( isset( $args[0] ) && is_array( $args[0] ) ) { $args[0]['has_children'] = $this->has_children; // Backwards compatibility. } $cb_args = array_merge( array( &$output, $element, $depth ), $args ); call_user_func_array( array( $this, 'start_el' ), $cb_args ); // descend only when the depth is right and there are childrens for this element if ( ( $max_depth == 0 || $max_depth > $depth + 1 ) && isset( $children_elements[ $id ] ) ) { foreach ( $children_elements[ $id ] as $child ) { if ( ! isset( $newlevel ) ) { $newlevel = true; //start the child delimiter $cb_args = array_merge( array( &$output, $depth ), $args ); /** Additional check for custom addition of id to sub-level */ if ( $element->post_name = 'Megatron' ) { $cb_args['sub_menu_id'] = 'megatron'; } /** End custom check */ call_user_func_array( array( $this, 'start_lvl' ), $cb_args ); } $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output ); } unset( $children_elements[ $id ] ); } if ( isset( $newlevel ) && $newlevel ) { //end the child delimiter $cb_args = array_merge( array( &$output, $depth ), $args ); call_user_func_array( array( $this, 'end_lvl' ), $cb_args ); } //end this element $cb_args = array_merge( array( &$output, $element, $depth ), $args ); call_user_func_array( array( $this, 'end_el' ), $cb_args ); } 

O código adicionado aqui verifica o nome do elemento principal e, em seguida, anexa informações de identificação aos args que serão enviados para start_lvl() .

Agora você pode exibir a marcação correta em seu método start_lvl() com algo como:

 public function start_lvl( &$output, $depth = 0, $args = array(), $sub_menu_div = null ) { $indent = str_repeat("\t", $depth); if ( $sub_menu_div ) { $output .= "\n$indent
    \n"; } else { $output .= "\n$indent
    \n"; } }

Espero que ajude. Boa sorte!