• Не могу в классе walker найти где выводятся закрывающие
    мне нужно сделать меню с немного необычной структурой которая требует добавить два закрывающих тега div но лишь после того ul, который вложен в корневой li и 2 дива. (см вторую вставку кода ниже) Суть в том, что я теряю два закрывающих дива….
    Вот класс который я использую

    // свой класс построения меню:
    class magomra_walker_nav_menu extends Walker_Nav_Menu {
    
    // add classes to ul sub-menus
    function start_lvl( &$output, $depth ) {
    	// depth dependent classes
    	$indent = ( $depth > 0  ? str_repeat( "\t", $depth ) : '' ); // code indent
    	$display_depth = ( $depth + 1); // because it counts the first submenu as 0
    	$classes = array(
    		'b-menu__hidden_list', // по умолчанию у подменю ul класс 'sub-menu',
    		/*( $display_depth % 2  ? 'menu-odd' : 'menu-even' ),
    		( $display_depth >=2 ? 'sub-sub-menu' : '' ),
    		'menu-depth-' . $display_depth*/
    		);
    	$class_names = implode( ' ', $classes ); // Объединяет элементы массива в строку (на случай если мы хотели несколько классов для ul)
    
    	// build html
    
    	if ($depth == 0) {$z1 = '<div class="b-menu__list__iteam_hidden"><div class="row">'; $z2 = '</div></div>';} else {$z1 = ''; $z2 = '';}
    	$output .= "\n" . $indent . $z1. '<ul class="' . $class_names . '">'."\n" ;
    }
    
    // add main/sub classes to li's and links
     function start_el( &$output, $item, $depth, $args ) {
    	global $wp_query;
    	$indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent
    
    	// depth dependent classes
    	$depth_classes = array(
    		( $depth == 0 ? 'b-menu__list__iteam' : 'b-menu__hidden_list__iteam' ), // если это родительский li
    		/*( $depth == 1 ? 'b-menu__hidden_list__iteam' : '' ),
    		( $depth >=2 ? 'sub-sub-menu-item' : '' ),
    		( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ),*/
    		'menu-item-depth-' . $depth
    	);
    	$depth_class_names = esc_attr( implode( ' ', $depth_classes ) );
    
    	// passed classes
    	$classes = empty( $item->classes ) ? array() : (array) $item->classes;
    	$class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) );
    
    	// build html
    	$output .= $indent . '<li id="nav-menu-item-'. $item->ID . '" class="' . $depth_class_names . ' ' . $class_names . '">';
    
    	// link attributes
    	$attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
    	$attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
    	$attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
    	$attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
    	$attributes .= ' class="menu-link ' . ( $depth > 0 ? 'b-menu__hidden_list__iteam__links' : 'b-menu__list__iteam__links' ) . '"'; // если глубина больше нуля класс 'b-menu__hidden_list__iteam__links'
    
    	$item_output = sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s',
    		$args->before,
    		$attributes,
    		$args->link_before,
    		apply_filters( 'the_title', $item->title, $item->ID ),
    		$args->link_after,
    		$args->after
    	);
    
    	// build html
    	$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
    }

    Вот код на выходе

    <ul class="b-menu__list ddmenu">
     <li id="nav-menu-item-8" class="b-menu__list__iteam menu-item-depth-0 menu-item menu-item-type-custom menu-item-object-custom"><a href="/property/" class="menu-link b-menu__list__iteam__links">Команда</a></li>
     <li id="nav-menu-item-4" class="b-menu__list__iteam menu-item-depth-0 menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children"><a href="http://nkbn.icopydoc.ru/category/%d0%b1%d0%bb%d0%be%d0%b3/" class="menu-link b-menu__list__iteam__links">Блог</a>
    	<div class="b-menu__list__iteam_hidden">
    		<div class="row">
    		<ul class="b-menu__hidden_list">
    		 <li id="nav-menu-item-26" class="b-menu__hidden_list__iteam menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page"><a href="http://nkbn.icopydoc.ru/%d0%bd%d0%b0%d1%88%d0%b0-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b0/" class="menu-link b-menu__hidden_list__iteam__links">Наша команда</a></li>
    		</ul>
    
    		<!-- В этом месте после закрывающего </ul> код класса теряет два дива --->
    
     </li>
     <li id="nav-menu-item-6" class="b-menu__list__iteam menu-item-depth-0 menu-item menu-item-type-post_type menu-item-object-page"><a href="http://nkbn.icopydoc.ru/sample-page/" class="menu-link b-menu__list__iteam__links">Сотрудничество</a></li>
    </ul>

    Подскажите, как мне добавить эти 2 закрывающих дива….

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Где закрывающий ul в walker?

    Открывающий — в методе start_lvl(), закрывающий — в end_lvl().

    Спасибо!
    На случай если кому нужно.
    Я добавил

    function end_lvl( &$output, $depth) {
    	$indent = ( $depth > 0  ? str_repeat( "\t", $depth ) : '' ); // code indent
    	$indent = str_repeat("\t", $depth);
    	if ($depth == 0) {$z2 = '</div></div>';} else {$z2 = '';}
    	$output .= "$indent</ul>\n".$z2;
    }

    и все работает!

Просмотр 2 ответов — с 1 по 2 (всего 2)

Тема «Где закрывающий ul в walker?» закрыта для новых ответов.