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

WordPress自定义菜单问题:如何获取特定菜单项的子菜单项列表

获取WordPress特定菜单项的所有子菜单项列表

嘿,我来帮你搞定这个问题!针对你描述的菜单结构(一级菜单item 1下有二级菜单leftside、rightside,每个二级菜单下又有多个三级子项),我给你分享两种实用的方法来获取指定菜单项的所有子项:

方法一:使用WordPress内置函数wp_get_nav_menu_items

这是最直接的方式,先获取整个菜单的所有项,再筛选出目标父项的子项。

步骤示例代码:

// 替换成你的菜单名称、slug或者ID(比如"main-menu")
$menu_identifier = '你的菜单标识';
$all_menu_items = wp_get_nav_menu_items($menu_identifier);

// 1. 先找到目标父菜单项的ID(比如二级菜单"leftside")
$target_parent_id = 0;
foreach ($all_menu_items as $menu_item) {
    // 这里通过标题匹配,你也可以用slug或已知的ID直接赋值
    if ($menu_item->title === 'leftside') {
        $target_parent_id = $menu_item->ID;
        break;
    }
}

// 2. 筛选出所有属于该父项的子菜单项
$target_subitems = [];
if ($target_parent_id !== 0) {
    foreach ($all_menu_items as $menu_item) {
        if ($menu_item->menu_item_parent == $target_parent_id) {
            $target_subitems[] = $menu_item;
        }
    }
}

// 3. 遍历输出子菜单项(根据你的需求调整格式)
if (!empty($target_subitems)) {
    echo '<ul>';
    foreach ($target_subitems as $subitem) {
        echo sprintf(
            '<li><a href="%s">%s</a></li>',
            esc_url($subitem->url),
            esc_html($subitem->title)
        );
    }
    echo '</ul>';
}

代码说明:

  • 先通过wp_get_nav_menu_items拉取整个菜单的所有条目
  • 遍历找到你需要的父菜单项(这里用标题匹配,如果你已经知道父项ID,可以直接跳过这一步,直接赋值$target_parent_id,效率更高)
  • 再次遍历所有条目,收集父ID等于目标ID的子项
  • 最后安全输出子项(用esc_url和esc_html防止XSS风险,这一步很重要!)

方法二:自定义Walker类(适合更复杂的菜单渲染)

如果你需要在主题的菜单渲染过程中精准控制子项输出,可以自定义一个Walker类:

class Custom_Submenu_Walker extends Walker_Nav_Menu {
    public $target_parent_title = 'leftside';
    public $found_target = false;
    public $output_subitems = false;

    function start_el(&$output, $item, $depth = 0, $args = null, $id = 0) {
        // 找到目标父菜单项时标记
        if ($item->title === $this->target_parent_title && $depth === 1) {
            $this->found_target = true;
            return; // 不输出父项本身,只输出子项
        }

        // 如果已经找到目标父项,且当前是它的子项(depth=2),则输出
        if ($this->found_target && $depth === 2) {
            $output .= sprintf(
                '<li><a href="%s">%s</a></li>',
                esc_url($item->url),
                esc_html($item->title)
            );
        }

        // 当离开目标父项的层级时,重置标记
        if ($this->found_target && $depth < 2) {
            $this->found_target = false;
        }
    }
}

// 使用自定义Walker渲染菜单
wp_nav_menu(array(
    'menu' => '你的菜单标识',
    'walker' => new Custom_Submenu_Walker(),
    'depth' => 3 // 确保遍历到三级菜单
));

说明:

  • 这个Walker类会在遍历菜单时,找到指定标题的二级菜单项,然后只输出它的三级子项
  • 适合你需要直接在菜单渲染流程中获取子项的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:51