我正在使用wp_nav_menu,并尝试为子级别下拉列表创建自定义输出。我遇到了“ items_wrap”参数,但是关于它是什么,它如何工作以及可以用它做什么事情的信息确实很少。

“%1 $ s”和“%2 $ s”到底是什么? (任何人都可以用外行的术语解释吗?)

#1 楼

'items_wrap'的参数wp_nav_menu()默认为:

'<ul id="%1$s" class="%2$s">%3$s</ul>' 


使用sprintf()解析的aa模板: >编号的占位符– %1$s%2$s%3$s –引用sprintf()中第一个参数之后的参数。百分号标记占位符,位置的数字和类型s表示应将其视为字符串。
除非您确实知道要做什么,否则请勿更改类型。 :)




如果设置了$wrap_id,则它是参数'menu_id';否则,它是'menu-' . $menu->slug。它设置了,否则为空。

$wrap_class是菜单的内部内容的字符串。

假设您不需要'menu_class'。只需省略第二个字符串:

$nav_menu .= sprintf( 
    $args->items_wrap
,   esc_attr( $wrap_id )    // %1$s
,   esc_attr( $wrap_class ) // %2$s
,   $items                  // %3$s
);


如果不需要$itemsclass,并且想要另一个容器(因为使用了自定义的助步器):

wp_nav_menu( array( 'items_wrap' => '<ul id="%1$s">%3$s</ul>' ) );


要点是:您必须使用class中给出的替换编号。 id始终是项目列表。

评论


感谢您尝试解释。我有点看得出来,但对我来说却没有用。我想在我的li项目中添加一个类。您似乎对每个项目都使用ul吗?我在代码中也看不到任何sprintf,因此不清楚。

–降落
16年9月9日在12:31

@landed这是针对整个菜单的,而不是针对每个项目的。请使用我们的搜索,我们已经为您的问题提供了解决方案。

– fuxia♦
2016年9月9日下午13:27

我确实在网上搜索,其他人遇到了相同的问题,我需要扩展walker类并在其中添加我的html,这对我来说还可以,但是我不得不从旧类中复制很多代码,并重命名并更改它,然后设置使用我的自定义沃克类的菜单。谢谢

–降落
16 Sep 10'在17:29

我参加聚会可能有点晚,但是如果您想在items_wrap中引入文字,您会如何?

– henrywright
16 Sep 19'在12:42

@henrywright首先翻译这些值,然后将它们传递给字符串。

– fuxia♦
16-09-19在12:59



#2 楼

从我收集的信息中获取输出,并为li提供一个带有菜单名称的id和class。因此,当您要设置特定菜单的样式时,如果要设置其样式,则可以获取其ID和/或类。 1和2只是一个不同的输出。