Можем ли мы изменить первый (root) UL-тег WordPress для пользовательского класса Walker, используя PHP, переопределив The Walker_Nav_menu - PullRequest
1 голос
/ 15 февраля 2020

Привет, ребята, использующие Wordpress Framework. Обычно я создаю пользовательский Walker, который расширяет Walker_Nav_menu , чтобы создать пользовательское меню WordPress. Я зарегистрировал расположение меню в функциях. php, я подключил меню и создал custom_nav_walker, и это сработало. однако Я не могу изменить основной тег ul root, чтобы поместить туда встроенный код с помощью класса navwalker php без использования javascript.

Итак, меню навигации html что-то вроде этого.

<ul id="Root-tag-That-I-want-to-modify" class="vertical medium-horizontal menu dropdown" <!--  I WANT TO ECHO CODE HERE USING PHP --> >
<li id="menu-item-146" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home active menu-item-146">
<a href="http://Thelink">Item</a></li>
<li id="menu-item-147" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children active has-dropdown menu-item-147"><a href="http://ThesecondLink">submeu</a>
<ul class="0 menu submenu is-dropdown-submenu first-sub vertical"  data-submenu="" role="menu">
<li id="menu-item-153" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home active menu-item-153"><a href="http://anotherlink">submeu item</a> 
</li></ul></li></ul>        

Я попытался переопределить функцию start_lvl, которая находится внутри класса Walker:

    function start_lvl( &$output, $depth = 0, $args = array() ) {
      $indent = str_repeat( "\t", $depth );
      $first = ($depth === 0) ? 'first-sub' : '';
      $output .= "\n$indent<ul class=\"$depth menu submenu is-dropdown-submenu $first vertical\"  data-submenu=\"\" role=\"menu\">\n";
     }

После печати $ глубины внутри тега ul, который я нашел из-за того, что этот первый UL не обрабатывается этим start_lvl

Где в этом классе я могу переопределить основной тег UL, я проверил массив wp_nav_menu вызова wordpress, может быть, я что-то пропустил ?? Я заинтересован в том, чтобы сделать это с PHP без Javascript.

1 Ответ

0 голосов
/ 15 февраля 2020

Одно решение, которое я нашел, это для изменения параметра 'menu_class' при создании экземпляра класса ходунка . Обычно у вас есть:

wp_nav_menu( array(
        'menu_class'      => 'vertical medium-horizontal menu dropdown',
        'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
        'depth'           => 0,
        'walker'          => new Custom_Walker_Class()  ));

Чтобы включить несколько дополнительных примеров кодов строк ( data-responseive-menu = "accordion medium-dropdown" role = "menubar ') Я изменил его на:

wp_nav_menu( array(
        'menu_class'      => 'vertical medium-horizontal menu dropdown" data-responsive-menu="accordion medium-dropdown" role="menubar',
        'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
        'depth'           => 0,
        'walker'          => new Custom_Walker_Class()  ));

В основном он отправляет весь встроенный код тега ul внутри этого параметры string. Так как он получает строку (которая должна быть просто классами тегов ul) и заключает ее в кавычки, чтобы вывести ее в качестве оболочки для элементов nav в Html.

Ok Пока что идея хороша, но я не смог избежать кавычек, и я закончил с некоторым исходным кодом, подобным этому:

class = "; вертикальное выпадающее меню среднего-горизонтального"; data-responseive-menu = " ; аккордеонный средний выпадающий "роль ="; menubar ";

Что я сделал, чтобы исправить положение:

  1. Я сохранил результат wp_nav_menu в некоторой переменной
  2. Я закодировал эту переменную в строка («; станет»)
  3. Я декодировал и печатал получившиеся HTML

    $db = esc_attr('" ');
    $inlinecode= esc_attr('vertical medium-horizontal menu dropdown' . $db . ' data-responsive-menu=' . $db . ' accordion medium-dropdown' . $db . ' role=' . $db . ' menubar' . $db . ');
    
    
    $mainmenu = wp_nav_menu( array(
    
        'menu_class'      => $inlinecode,
        'echo'            => false,
        'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
        'depth'           => 0,
            'walker'          => new Walker_Primary()
            ));
    
            $men_encoded = esc_attr($mainmenu);
            echo html_entity_decode($men_encoded);
    
...