如何向菜单元素添加子项(使用wp_NAV_MENU_OBJECTS)

时间:2013-05-23 作者:Leo

(1) 我使用了答案中给出的代码How to use logout function on custom menu link?以编程方式将菜单元素添加到wp_nav_menu_objects (说“动物”)。我给它一个身份证,比如1000。

(2) 类似地,我成功地创建了我想成为先前存在的元素的子元素的元素(修复menu_item_parent 到父元素的id)(如“Jonquil”到元素“Flowers”)

(3) 当我试图将children元素(比如“Cats”和“Dogs”)添加到编程添加的元素“anives”时,问题就出现了。猫和狗与动物处于同一水平,似乎WP无法找到它们的父母。。。(是的,我在1之后做3…)

知道我会错过什么吗?

3 个回复
SO网友:BenB

自2014年这里的答案发布以来,WordPress的功能发生了变化。

从今天起(版本4.6.1),此代码将创建一个名为“我的菜单”、主项和子项的主菜单。

要运行代码,只需粘贴并保存在函数中即可。您的child theme.

$menu_id = wp_create_nav_menu(\'My Menu\');

$parent_item = wp_update_nav_menu_item($menu_id, 0, array(
    \'menu-item-title\' =>  __(\'Main Page\'),
    \'menu-item-url\' => home_url( \'/main-page/\' ), 
    \'menu-item-status\' => \'publish\', 
    )
);

wp_update_nav_menu_item($menu_id, 0, array(
    \'menu-item-title\' =>  __(\'Sub Item Page\'),
    \'menu-item-url\' => home_url( \'/sub-item-page/\' ), 
    \'menu-item-status\' => \'publish\', 
    \'menu-item-parent-id\' => $parent_item)
);
文档:

SO网友:Ravinder Kumar

您的代码可能如下所示

    add_filter( \'wp_nav_menu_objects\', \'ravs_add_menu_parent_class\' );
    function ravs_add_menu_parent_class( $items ) {
      foreach ( $items as $item ) {
       print_r($item);//print each menu item an get your parent menu item-id
      }
      $link = array (
            \'title\'            => \'Cats\',
            \'menu_item_parent\' => id of Animals menu like 1372,
            \'ID\'               => \'\',
            \'db_id\'            => \'\',
            \'url\'              => \'www.google.com\'
        );
      $items[] = (object) $link;
      return $items;    
    }

SO网友:danbrellis

利奥,

Ravs向现有WP\\U Post\\U对象添加子导航是正确的,但如果您正在创建导航项目,然后想要向其添加子导航,则必须设置导航项目的db\\U id:

add_filter( \'wp_nav_menu_objects\', \'ravs_add_menu_parent_class\' );
function ravs_add_menu_parent_class( $items ) {
    $animals = array (
        \'title\'            => \'Animals\',
        \'menu_item_parent\' => 0,
        \'ID\'               => 999999999999876, //an unlikely, high number
        \'db_id\'            => 999999999999876, //an unlikely, high number
        \'url\'              => \'www.google.com?s=animals\'
    );
    $items[] = (object) $animals;

    $cats = array (
        \'title\'            => \'Cats\',
        \'menu_item_parent\' => 999999999999876,
        \'ID\'               => \'\',
        \'db_id\'            => \'\',
        \'url\'              => \'www.google.com/?s=cats\'
    );
    $items[] = (object) $cats ;

    return $items;    
}

结束

相关推荐

Order Admin sub-menu items?

我正在使用向CPT管理菜单添加项目add_submenu_page 这很好,但它们被添加到CPT选项后的子菜单底部。我希望能够将它们放在最上面,但我想这个问题也可以应用于订购所有基于管理员的子菜单项。我所尝试的(不起作用,我尝试了几种变体),function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( \'edi