You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress菜单前端渲染问题:子项层级显示与<li>计数换行求助

WordPress菜单子项按数量分组(每4个生成新行块)解决方案

你现在遇到的问题是WordPress菜单调用时,子项没法按照每4个一组拆分到新的<li><ul class="rd-megamenu-list">容器里,对吧?我给你调整一下代码逻辑,就能实现这个需求:

核心思路

新增一个专门统计子项数量的计数器,每次输出子项时累加计数,当计数达到4或者当前是父项的最后一个子项时,就闭合当前的行块容器,并重置计数器,准备下一组的输出。

修改后的完整代码片段

<ul class="rd-navbar-nav"> 
    <?php 
    $count = 0; 
    $submenu = false; 
    $sub_item_count = 0; // 新增子项计数器
    foreach( $menuitems as $item ): 
        $link = $item->url; 
        $title = $item->title; 

        // 处理父菜单项
        if ( !$item->menu_item_parent ): 
            $parent_id = $item->ID; 
            $sub_item_count = 0; // 切换父项时重置子项计数器
    ?> 
    <li> 
        <a href="<?php echo $link; ?>" class="title">
            <?php echo $title; ?> 
        </a> 
    <?php endif; ?> 

    <?php if ( $parent_id == $item->menu_item_parent ): ?> 
        <?php if ( !$submenu ): 
            $submenu = true; 
        ?> 
        <ul class="rd-navbar-megamenu"> 
        <?php endif;?>

        <!-- 开始处理子项分组逻辑 -->
        <?php if ($sub_item_count % 4 == 0): ?>
            <li>
                <ul class="rd-megamenu-list">
        <?php endif; ?>

        <li><a href="<?php echo $link; ?>" class="title"><?php echo $title; ?></a></li>

        <?php 
        $sub_item_count++;
        // 判断是否需要闭合当前分组:要么满4个,要么是当前父项的最后一个子项
        $is_last_subitem = false;
        if (isset($menuitems[$count + 1])) {
            $is_last_subitem = ($menuitems[$count + 1]->menu_item_parent != $parent_id);
        } else {
            $is_last_subitem = true;
        }

        if ($sub_item_count % 4 == 0 || $is_last_subitem): ?>
                </ul>
            </li>
        <?php endif; ?>
        <!-- 结束子项分组逻辑 -->

    <?php if ( $is_last_subitem && $submenu ): ?> 
        </ul> 
        <?php $submenu = false; endif; ?> 
    <?php endif; ?> 

    <?php if ( isset($menuitems[$count + 1]) && $menuitems[$count + 1]->menu_item_parent != $parent_id ): ?> 
        </li> 
        <?php $submenu = false; endif; ?> 
    <?php $count++; endforeach; ?> 
</ul>

代码说明

  1. 新增$sub_item_count计数器:用来跟踪当前父项下面已经输出的子项数量,切换父项时会重置这个计数器,避免不同父项的子项计数混淆。
  2. 分组判断逻辑:
    • 当$sub_item_count是4的倍数时(也就是第1、5、9...个子项),打开新的<li><ul class="rd-megamenu-list">容器。
    • 每输出一个子项后计数器加1,当计数器达到4或者当前是父项的最后一个子项时,闭合当前的容器标签,完成一组的输出。
  3. 最后子项处理:避免父项的子项总数不是4的倍数时,最后一组标签无法闭合的问题,专门判断了是否是当前父项的最后一个子项。

这样修改后,你的菜单子项就会自动按每4个一组拆分到新的行块里,和你提供的HTML模板结构完全匹配啦。

内容的提问来源于stack exchange,提问作者Mu Lem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:39