关于wp_nav_menu的“ items_wrap”参数的文档吗?


42

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

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

Answers:


57

默认参数'items_wrap'wp_nav_menu()

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

模板解析为sprintf()

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

编号的占位符- ,,%1$s -参见参数的第一个参数。百分号标记占位符,位置和类型的数字表示应将其视为字符串。 除非您确实知道要做什么,否则请勿更改类型。:)%2$s%3$ssprintf()s

  • $wrap_id'menu_id'如果已设置,则为参数,否则为'menu-' . $menu->slug
  • $wrap_class是参数('menu_class'如果已设置),否则为空。
  • $items 是菜单内部内容的字符串。

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

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

如果不需要class和和id,并且需要另一个容器(因为使用了自定义的walker):

wp_nav_menu( array( 'items_wrap' => '<div>%3$s</div>' ) );

要点是:您必须使用数字替换中给出的替换wp_nav_menu()%3$s始终是项目列表。


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

1
@landed适用于整个菜单,而不适用于每个菜单项。请使用我们的搜索,我们已经为您的问题提供了解决方案。
fuxia

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

我参加聚会可能有点晚了,但是如果您想向您介绍文本,items_wrap您会怎样?
henrywright

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.