将其他菜单作为主菜单的子菜单插入

时间:2015-03-09 作者:christian

我有一个主菜单,其中包含我的每个服务CPT的项目。

每个CPT都有另一个与之关联的菜单,我使用ACF get\\u field函数获取其id。

我要做的是将这些服务菜单中的项目作为子菜单插入主菜单中服务链接下。

我正在使用wp\\u get\\u nav\\u items过滤器,但我似乎无法获得正确的格式。我想我可以将服务菜单中的项附加到主菜单项的数组中,更改menu\\u item\\u父项。然而,这似乎不起作用。它最终只是在顶层附加所有项目。

function custom_insert_service_menus($items, $menu, $args){
if($menu->slug != \'main-menu\') return $items; // only for main-menu
$new_items = [];
foreach($items as $item){
    if($item->object == \'service\'){
        $menu_id = get_field(\'menu\', $item->object_id);
        if(!empty($menu_id)){ // no menu so skip item
        $service_menu_items = wp_get_nav_menu_items($menu_id);
            foreach($service_menu_items as $service_menu_item){
                if($service_menu_item->menu_item_parent == 0){
                    $service_menu_item->menu_item_parent = $item->ID;
                }
                $new_items[] = $service_menu_item;
            }
        }
    }
}
$combined_items = array_merge($items, $new_items);
return $combined_items;
}
add_filter(\'wp_get_nav_menu_items\', \'custom_insert_service_menus\',null,3);

1 个回复
SO网友:christian

为了让它工作,我不得不重新生成菜单顺序。

function custom_insert_service_menus($items, $menu, $args){
if($menu->slug != \'main-menu\') return $items; // only run filter for main-menu
$new_items = [];
$menu_order = 1;
foreach($items as $item){

    $item->menu_order = $menu_order;
    $new_items[] = $item;
    $menu_order++;

    if($item->object == \'service\'){
        $menu_id = get_field(\'menu\', $item->object_id);
        if(!empty($menu_id)){ // no menu so skip item
        $service_menu_items = wp_get_nav_menu_items($menu_id);
            foreach($service_menu_items as $service_menu_item){
                if($service_menu_item->menu_item_parent == 0){
                    $service_menu_item->menu_item_parent = $item->ID;
                }
                $service_menu_item->menu_order = $menu_order;
                $new_items[] = $service_menu_item;
                $menu_order++;
            }
        }
    }

}
return $new_items;
}

结束

相关推荐

在非文档挂接上调用Apply_Filters

我一直在努力学习如何编写插件,我认为最好的方法是查看其他插件。我在看这一行和第一行/** * Plugin Name: Media Library Categories * Plugin URI: http://wordpress.org/plugins/wp-media-library-categories/ * Description: Adds the ability to use categories in the media library. * Vers