个性化阅读
专注于IT技术分析

可以通过覆盖Walker_Nav_menu来使用PHP更改wordpress定制的walker类的第一个(根)ul标签吗?

大家好, 我通常使用Wordpress Framework创建一个扩展Walker_Nav_menu的自定义walker, 以制作自定义wordpress菜单。我确实在functions.php中注册了Menu位置, 我确实连接了菜单并创建了一个custom_nav_walker, 并且可以正常工作。但是我不能使用Navwalker php类将main ul根标记更改为一些内联代码, 而不使用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感兴趣。


#1


我发现的一种解决方案是在实例化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-sensitive-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中nav元素的包装。

好的, 到目前为止, 这个想法很好, 但是我无法避免使用引号, 因此我以如下的源代码结尾:

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

我所做的纠正操作是:

我将wp_nav_menu结果存储到一些变量中

我将该变量编码为字符串(“将变为”)

我解码并打印了结果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);
赞(1)
未经允许不得转载:srcmini » 可以通过覆盖Walker_Nav_menu来使用PHP更改wordpress定制的walker类的第一个(根)ul标签吗?

评论 抢沙发

评论前必须登录!