问题描述

我正在为我的导航菜单创建一个自定义步行者。目标是将菜单分成如下列:

我可以通过查看 $item->menu_order 来轻松确定我在列表中的哪个位置。我不知道的是菜单中有多少个项目。

我如何从 Walker 里面看出来?

更新:

我知道有几种其他方法可以创建列。所有这些都有自己的缺点,但是:

  1. CSS 浮点数如下面的 @sagive 所示,这可以通过浮动所有列表元素来实现。问题是列表改变了顺序。而不是下移第一列,然后将其包装到第二列,该列表将跨越第一行的所有四列,然后跨第二行的所有四列。这弄乱了秩序。

  2. CSS 列。这几乎是完美的解决方案。它会给我正确的我想要的 – 除了 IE 不是它。即使在 IE 9. 这使得它不能用于主流网站。

  3. jQuery 的。有一些 client-side javascript 我可以黑客列表,并使其布局我想要的方式。这是凌乱的,而对于那些有残疾人士的人而言,

  4. PHP 。这是我问这个问题的方法。我将列表分成四个单独的无序列表,每个都在 html 中转储,然后使用 CSS 来浮动列表以创建四个不同的列。在 PHP 中生产可能很棘手,但对于所有浏览器,结果看起来都一样。这使得它成为我认为最好的选择。

解:

对于那些可能跟随的人来说,这里是我终于得到答案的代码:

// The menu handle from the register_nav_menu statement in functions.php
$theme_location = 'my-menu-handle';

$theme_locations = get_nav_menu_locations();

$menu_obj = get_term( $theme_locations[$theme_location], 'nav_menu' );

// Echo count of items in menu
echo $menu_obj->count;

最佳解决方案

调用 wp_get_nav_menu_object 获取一个菜单对象,这将为您提供该菜单的项目数量。

例:

// Get menu object
$my_menu = wp_get_nav_menu_object( 'your-menu-name-or-slug' );

// Echo count of items in menu
echo $my_menu->count;

希望有帮助。

参考文献

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