item_spacing ) && 'discard' === $args->item_spacing ) { $t = ''; $n = ''; } else { $t = "\t"; $n = "\n"; } $indent = str_repeat( $t, $depth ); // Dropdown class. $classes = array( 'navbar-dropdown' ); if ( $depth > 0 ) { $classes[] = 'is-nested is-boxed'; } if ( $this->mega_menu ) { $classes[] = 'is-mega-menu'; } $class_names = join( ' ', apply_filters( 'treviso_nav_menu_submenu_css_class', $classes, $args, $depth ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; // Wrap items in container for mega menu. if ( $this->mega_menu ) { if ( 0 === $depth ) { $output .= "{$n}{$indent}{$n}"; $output .= ''; $output .= "{$n}{$indent}
{$n}"; $output .= "{$n}{$indent}
{$n}"; } } else { $output .= "{$n}{$indent}{$n}"; } } /** * Ends the list of after the elements are added. * * @param string $output Used to append additional content (passed by reference). * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. */ public function end_lvl( &$output, $depth = 0, $args = null ) { if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) { $t = ''; $n = ''; } else { $t = "\t"; $n = "\n"; } $indent = str_repeat( $t, $depth ); // End container wrapper for mega menu. if ( $this->mega_menu ) { if ( 0 === $depth ) { $output .= "$indent
{$n}"; $output .= "$indent
{$n}"; $output .= ''; $output .= "$indent{$n}"; $this->mega_menu = false; } } else { $output .= "$indent{$n}"; } } /** * Starts the element output. * * @param string $output Used to append additional content (passed by reference). * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $id Current item ID. */ public function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) { if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) { $t = ''; $n = ''; } else { $t = "\t"; $n = "\n"; } $indent = ( $depth ) ? str_repeat( $t, $depth ) : ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; // Enable a mega menu. if ( in_array( 'has-mega-menu', $classes, true ) ) { $this->mega_menu = true; } // Make any item with children hoverable with a dropdown. if ( $args->walker->has_children ) { array_unshift( $classes, 'is-hoverable' ); array_unshift( $classes, 'has-dropdown' ); } // Only the mega menu footer uses level-item, everywhere else navbar-item is used. if ( $this->mega_menu ) { if ( in_array( 'is-footer-left', $classes, true ) || in_array( 'is-footer-right', $classes, true ) ) { array_unshift( $classes, 'level-item' ); } else { array_unshift( $classes, 'navbar-item' ); } } else { array_unshift( $classes, 'navbar-item' ); } $classes[] = 'menu-item-' . $item->ID; // Get font awesome classes from menu item and remove, to be added to descendant . $fa_classes = preg_grep( '/(fa-.*|^fas|^fab)/m', $classes ); $classes = array_diff( $classes, $fa_classes ); $args = apply_filters( 'treviso_nav_menu_item_args', $args, $item, $depth ); $class_names = join( ' ', apply_filters( 'treviso_nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; $id = apply_filters( 'treviso_nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args, $depth ); $id = $id ? ' id="' . esc_attr( $id ) . '"' : ''; // Custom wrappers for different objects. if ( $this->mega_menu ) { if ( 1 === $depth ) { if ( in_array( 'is-footer', $classes, true ) ) { $output .= "{$n}"; $output .= "{$n}"; $output .= "
{$n}"; $output .= $indent . '