How to count nav menu items?

时间:2011-12-02 作者:Axeva

我正在为导航菜单创建一个自定义漫游器。目标是将菜单拆分为以下列:

enter image description here

我可以通过查看$item->menu_order. 我不知道菜单上一共有多少项。

我怎样才能从助行器内部找到答案?

Updated:

我意识到还有其他几种创建列的方法。然而,所有这些都有其缺点:

  1. CSS Floats. 正如@sagive在下面所建议的,这可以通过浮动所有列表元素来实现。问题是列表的顺序改变了。列表将遍历第一行的所有四列,然后遍历第二行的所有四列,而不是向下遍历第一列,然后再遍历第二行的所有四列。这打乱了秩序。

  2. CSS Columns. 这几乎是完美的解决方案。它会给我想要的东西,只是我根本不想要。即使在IE 9上。这使得它无法用于主流网站。

  3. jQuery. 使用一些客户端javascript,我可以修改列表并使其按我想要的方式进行布局。虽然这很混乱,但对于禁用js的人来说,这很糟糕。

  4. PHP. 这就是我在这个问题上要问的方法。我将列表分为四个独立的无序列表,将每个列表转储到html中,然后使用CSS浮动列表以生成四个不同的列。用PHP生成可能很棘手,但对于所有浏览器,结果都是一样的。我相信这是最好的选择。

Solution:

对于那些可能会关注的人,以下是我最终用来获得答案的代码:

// 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;

4 个回复
最合适的回答,由SO网友:t31os 整理而成

呼叫wp_get_nav_menu_object 获取菜单对象,该对象将为您提供该菜单的项目计数。

Example:

// 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;
希望这有帮助。

SO网友:M. Sage

为什么不直接使用该功能array_chunk() ?

假设您构建了一个<li> 标记,则要拆分和显示它们的代码可能如下所示:

$columns = array_chunk( $myArray, 4 );
foreach ( $columns as $column ) {
    echo \'<li>\' . $column . \'</ul>\';
}

SO网友:Sagive

你不认为(如果我很粗鲁的话,请原谅)只需浮起来就简单多了吗;把所有的“li”放在一个div中,以结构背景作为图像??

示例:

<style type="text/css">
.fourPartMenu {

    border: 1px solid #444;
    width: 800px;
    padding: 10px 15px;
}

.fourPartMenu ul {
    list-style: circle; // replace with your img
    padding: 0px;
    margin: 0px;
}

.fourPartMenu ul li {
    float: left;
    width: 190px;
}

</style>

<div class="fourPartMenu">
    <ul>
        <li><a href="#">One</a></li>
        <li><a href="#">Two</a></li>
        <li><a href="#">Three</a></li>
        <li><a href="#">Four</a></li>
        <li><a href="#">Five</a></li>
        <li><a href="#">Six</a></li>
        <li><a href="#">Seven</a></li>
        <li><a href="#">Eight</a></li>
        <li><a href="#">Nine</a></li>
        <li><a href="#">Ten</a></li>
    </ul>
</div>
我认为这将更容易实施,但。。我知道,不完全是你的艰难之后,一种新的观点有时会有所帮助:)

SO网友:Caio Costa

我知道您已经找到了一个解决方案,但不知道这是否正是您要搜索的内容,但我不久前编写了一个插件用于客户端站点,它为每个菜单、子菜单和菜单项创建类。这叫做高级导航菜单。如果您最终使用它,请随时向我发送功能请求。

结束

相关推荐

如何让我的自定义帖子类型出现在NAV-menus.php‘Menu’中?

我的自定义帖子类型有点问题。我可以在我的主题中很好地创建它们,但我无法让它们显示在“菜单”屏幕中。。。至少在默认情况下不是这样。我曾尝试在代码中添加菜单和UI标志(见下文),但没有成功。有趣的是,当我启用自定义帖子类型UI插件时,自定义帖子类型在“菜单”屏幕中显示良好(有时)。这似乎向我暗示,我在某个地方遗漏了一个步骤,而且不知何故,自定义帖子类型UI插件设置了该标志,并允许我的自定义帖子类型和分类显示在导航菜单中。php“菜单”屏幕。编辑::以上位已回答。谢谢你,米洛。我应该在“屏幕选项”选项卡中打开它