更新导航菜单未选择父项

时间:2015-02-09 作者:Frank Astin

我正在以编程方式构建导航菜单,如下所示:

$menu_exists = wp_get_nav_menu_object( \'test_menu\' );
if( !$menu_exists){
    $menu_id = wp_create_nav_menu(\'test_menu\');
    buildMenu($menuArray,$menu_id);
}

function buildMenu($array,$menu_id) {

    foreach ($array as $menu) {

        var_dump( wp_update_nav_menu_item($menu_id, 0, array(
            \'menu-item-title\' => $menu[0]->post_title,
            \'menu-item-object\' => \'page\',
            \'menu-item-object-id\' => $menu[0]->ID,
            \'menu-item-type\' => \'post_type\',
            \'menu-item-status\' => \'publish\',
            \'menu-item-parent-id\' => $menu[0]->post_parent)));


        if(!empty($menu[1])) {
            buildMenu($menu[1],$menu_id);
        }
    }

}
在哪里$menuArray 是post对象的集合。这是可行的,但是所有菜单项都被添加到顶层menu-item-parent-id 被忽略。WordPress是否期望menu-item-parent-id 是导航菜单id还是post id?

1 个回复
SO网友:Frank Astin

正如我最初怀疑的那样,menu-item-parent-id 获取菜单项的id,而不是父页的id。

因此,我引用了菜单项ID并将其传递给递归函数:

function buildMenu( $array, $menu_id, $parent_id = false ) {

    foreach ($array as $menu) {

        $menuItemId = wp_update_nav_menu_item(
            $menu_id,
            0,
            array(
                \'menu-item-title\'     => $menu[0]->post_title,
                \'menu-item-object\'    => \'page\',
                \'menu-item-object-id\' => $menu[0]->ID,
                \'menu-item-type\'      => \'post_type\',
                \'menu-item-status\'    => \'publish\',
                \'menu-item-parent-id\' => $parent_id
            )
        );


        if(!empty($menu[1])) {
            buildMenu( $menu[1], $menu_id, $menuItemId );
        }

    }

}

结束

相关推荐

注册_NAV_MENUS,然后以编程方式创建菜单

我有一个register_nav_menus 调用我的主题函数。php://register nav menu and footer nav. register_nav_menus( array( \'main-nav\' => \'Main Navigation\', \'footer-nav\' => \'Footer Navigation\' ) ); 这很好,但我想采取额外的步