如何访问子菜单的描述?

问题描述 投票:0回答:2

好吧,我正在尝试使用下面附带的代码获取菜单项和子菜单的描述,但我无法得到它。

我正在尝试获得“关于我们”的描述和“我们的董事会成员”的描述:

About us and Our board and staff

对于菜单项(关于我们)工作正常,但由于某种原因子菜单(我们的董事会和工作人员)不包含信息description,它只有IDURLTitle,我已经尝试了子菜单的var_dump()对象(你可以在下面的代码中看到它),但它没有它。

function get_menu_section_description($sectionUrl){     

    $menu = wp_get_menu_array("menu");

    $desc = "";

    foreach ($menu as $key => $item){
        $arr = $item['url'];
        // var_dump($item);
        if ($sectionUrl == $arr[0]) {
            $desc = $item['description'];
        }

        if(sizeof($item['children']) > 0){
            foreach ($item['children'] as $key => $children){
                // var_dump($children);
                $arr2 = $children['url'];
                if ($sectionUrl == $arr2) {
                    $desc = $children['description'];
                }
            }
        }   }   return $desc; }

任何人都知道为什么没有描述项目,如何激活它或可能的解决方案?提前致谢。

php wordpress menu wordpress-theming submenu
2个回答
0
投票

WordPress 3.0以来,您不再需要自定义助行器了!

有walker_nav_menu_start_el过滤器,请参阅https://developer.wordpress.org/reference/hooks/walker_nav_menu_start_el/

 function add_menu_description($item_output, $item, $depth, $args) {
        if (strlen($item->description) > 0 ) {
            // append description after link
            $item_output .= sprintf('<span class="description">%s</span>', esc_html($item->description));

            // insert description as last item *in* link ($input_output ends with "</a>{$args->after}")
            //$item_output = substr($item_output, 0, -strlen("</a>{$args->after}")) . sprintf('<span class="description">%s</span >', esc_html($item->description)) . "</a>{$args->after}";
        }

        return $item_output;
    }
    add_filter('walker_nav_menu_start_el', 'add_menu_description', 10, 4);

0
投票

我几天前找到了一个解决方案,所以可能对某人有帮助,我遇到的问题是调用菜单wp_get_menu_array()的功能,我必须在子菜单中添加说明,只需:

function wp_get_menu_array($current_menu) {

    $array_menu = wp_get_nav_menu_items($current_menu);
    $menu = array();
    foreach ($array_menu as $m) {

        if (empty($m->menu_item_parent)) {
            $menu[$m->ID] = array();
            $menu[$m->ID]['ID']      =   $m->ID;
            $menu[$m->ID]['title']       =   $m->title;
            $menu[$m->ID]['url']         =   $m->url;
            $menu[$m->ID]['classes']     =   $m->classes;
            $menu[$m->ID]['description']     =   $m->description;
            $menu[$m->ID]['children']    =   array();
        }
    }
    $submenu = array();
    foreach ($array_menu as $m) {
        if ($m->menu_item_parent) {
            $submenu[$m->ID] = array();
            $submenu[$m->ID]['ID']       =   $m->ID;
            $submenu[$m->ID]['title']    =   $m->title;
            $submenu[$m->ID]['url']  =   $m->url;
            $submenu[$m->ID]['description']  =   $m->description; //Line added;
            $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];
        }
    }
    return $menu;

}
© www.soinside.com 2019 - 2024. All rights reserved.