问题描述

我正在使用 wp_nav_menu,并尝试为 sub-level 下拉菜单创建自定义输出。我遇到了”items_wrap” 的观点,但是关于它是什么,它的工作原理以及可以做什么样的事情真的没有太多的信息。

“%1$s” 和”%2$s” 究竟是什么? (任何人都可以用外行人的话解释吗?)

最佳解决方案

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

'<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$s – 参考 sprintf()中第一个参数后的参数。百分比符号标记一个占位符,位置和类型 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>' ) );

如果您不需要 classid,并且您想要另一个容器 (因为您使用 custom walker):

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

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。