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

如何获取WordPress子菜单项的描述?代码问题求助

问题分析与解决方案

首先,咱们先明确核心问题:你遇到的子菜单没有description字段,大概率是因为你用到的wp_get_menu_array这个自定义函数,在处理子菜单项的时候,只提取了ID、URL、Title这些常用字段,漏掉了描述属性。

WordPress原生的wp_get_nav_menu_items函数其实是会返回所有菜单项的description属性的,不管是主菜单还是子菜单——所以问题出在这个自定义的数组转换函数上,而不是WordPress本身的菜单数据。

另外先确认一个前提:你在WordPress后台编辑菜单时,有没有开启「描述」输入框?默认情况下这个选项是隐藏的,需要点击右上角的「屏幕选项」,勾选「描述」才能看到输入框,给子菜单项填写描述内容。如果这一步没做,就算代码能获取,后台也没地方填内容,自然是空的。


解决方案1:修改wp_get_menu_array函数

假设你的wp_get_menu_array是常见的自定义实现,大概长这样,你需要在处理子菜单项的地方加上description字段的赋值:

function wp_get_menu_array($menu_name) {
    $menu = wp_get_nav_menu_object($menu_name);
    $menu_items = wp_get_nav_menu_items($menu->term_id);
    $menu_array = array();

    foreach ($menu_items as $item) {
        // 处理主菜单项
        if (!$item->menu_item_parent) {
            $parent = array(
                'ID' => $item->ID,
                'title' => $item->title,
                'url' => $item->url,
                'description' => $item->description, // 主菜单已包含
                'children' => array()
            );
            $menu_array[] = $parent;
        } 
        // 处理子菜单项
        else {
            $child = array(
                'ID' => $item->ID,
                'title' => $item->title,
                'url' => $item->url,
                'description' => $item->description // 这里加上这一行!
            );
            // 找到对应的父菜单并添加子项
            foreach ($menu_array as &$parent) {
                if ($parent['ID'] == $item->menu_item_parent) {
                    $parent['children'][] = $child;
                    break;
                }
            }
        }
    }
    return $menu_array;
}

修改后,子菜单项的数组里就会包含description字段,你的原函数get_menu_section_description就能正常获取到子菜单的描述了。


解决方案2:直接用原生函数构建逻辑(无需修改现有函数)

如果不方便修改wp_get_menu_array,可以直接用WordPress原生的wp_get_nav_menu_items来实现你的需求,绕开自定义函数的字段遗漏问题:

function get_menu_section_description($sectionUrl){ 
    $menu = wp_get_nav_menu_object("menu");
    $menu_items = wp_get_nav_menu_items($menu->term_id);
    $desc = ""; 

    foreach ($menu_items as $item) {
        // 匹配主菜单或子菜单的URL
        if ($item->url == $sectionUrl) {
            $desc = $item->description;
            break; // 找到目标后直接跳出循环
        }
    }
    return $desc; 
}

这个方法直接遍历原生返回的菜单项对象,不管是主菜单还是子菜单,description属性都能直接获取到,逻辑更简洁,也避免了自定义函数的潜在问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:27:43