通过API函数,我想定义一个新的Navigation menu, 在当前主题中选择它,然后插入几页作为菜单项。例如,这是在主题激活时完成的。
在手动设置导航菜单和项目后,通过一个(相当痛苦的)反向工程数据库插入和更新过程,我拼凑了以下步骤,其中“footer nav”是我正在创建的导航菜单的slug ID:
if (!term_exists(\'footer-nav\', \'nav_menu\')) {
$menu = wp_insert_term(\'Footer nav\', \'nav_menu\', array(\'slug\' => \'footer-nav\'));
// Select this menu in the current theme
update_option(\'theme_mods_\'.get_current_theme(), array("nav_menu_locations" => array("primary" => $menu[\'term_id\'])));
// Insert new page
$page = wp_insert_post(array(\'post_title\' => \'Blog\',
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_type\' => \'page\'));
// Insert new nav_menu_item
$nav_item = wp_insert_post(array(\'post_title\' => \'News\',
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_type\' => \'nav_menu_item\'));
add_post_meta($nav_item, \'_menu_item_type\', \'post_type\');
add_post_meta($nav_item, \'_menu_item_menu_item_parent\', \'0\');
add_post_meta($nav_item, \'_menu_item_object_id\', $page);
add_post_meta($nav_item, \'_menu_item_object\', \'page\');
add_post_meta($nav_item, \'_menu_item_target\', \'\');
add_post_meta($nav_item, \'_menu_item_classes\', \'a:1:{i:0;s:0:"";}\');
add_post_meta($nav_item, \'_menu_item_xfn\', \'\');
add_post_meta($nav_item, \'_menu_item_url\', \'\');
wp_set_object_terms($nav_item, \'footer-nav\', \'nav_menu\');
}
这似乎可行,但:这是一种稳健而优雅的方式吗