1

大家好,使用 Wordpress 框架的人通常我会创建一个扩展Walker_Nav_menu的自定义 walker, 以制作自定义 wordpress 菜单。我确实在 functions.php 中注册了菜单位置,我确实连接了菜单并创建了一个 custom_nav_walker 并且它起作用了。但是,我无法更改主 ul 根标记以使用 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>        

我试图覆盖 Walker 类中的 start_lvl 函数:

    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 标记内打印 $depth 后,我发现这个 start_lvl 没有处理第一个 UL

在此类中,我可以在哪里覆盖主 UL 标记,我检查了 wordpress 调用 wp_nav_menu 数组,也许我错过了什么?我有兴趣在没有 Javascript 的情况下使用 PHP 来做这件事。

4

1 回答 1

0

我发现的一种解决方案是在实例化 walker 类时更改“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-responsive-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 标记内联代码。因为它正在获取一个字符串(应该只是 ul 标记类)并将其包装在引号中以将其打印为 Html 中导航元素的包装器。

好的 到目前为止,这个想法很好,但我无法逃避引号,我以一些源代码结束,如下所示:

class=" ;垂直中水平菜单下拉菜单" ; 数据响应菜单=“; 手风琴中下拉菜单“角色=”菜单栏“;

我所做的纠正事情是:

  1. 我将 wp_nav_menu 结果存储到某个变量中
  2. 我将该变量编码为一个字符串(&quot;将成为&#34;)
  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);
    
于 2020-02-15T07:12:16.460 回答