我一直在开发WordPress主题。我想能够,一旦激活,看看是否已经在后端创建了菜单。如果它存在,则选择它并将其用作主菜单,否则,创建一个具有顶级页面的新菜单,并将其注册为主菜单。
我在这方面似乎找不到什么,有人能解释一下吗?
我们找到了一些检查以下列出的当前默认菜单的代码
add_action( \'after_switch_theme\', \'mytheme_menu_fix\' );
function mytheme_menu_fix() {
$old_theme = get_option( \'theme_switched\' );
$old_theme_mods = get_option("theme_mods_{$old_theme}");
$old_theme_navs = $old_theme_mods[\'nav_menu_locations\'];
$new_theme_navs = get_theme_mod( \'nav_menu_locations\' );
if (!$new_theme_navs) {
$new_theme_locations = get_registered_nav_menus();
foreach ($new_theme_locations as $location => $description ) {
$new_theme_navs[$location] = $old_theme_navs[$location];
}
set_theme_mod( \'nav_menu_locations\', $new_theme_navs );
}
}
这很好,我们现在只需要在没有选择主导航的情况下进行排序。一、 E.重新安装主题
SO网友:Morgan Estes
您可以使用has_nav_menu()
检查该位置是否分配了一个。如果有,请使用wp_get_nav_menu_items()
复制菜单,然后将其分配到您在主题中注册的位置。
以下是我的想法。这是我的想法,需要更多的代码和测试,但希望这对您来说是一个良好的开端:
function wpse112672_menus() {
if( has_nav_menu( \'old_theme_menu_location\' ) {
$old_menu = wp_get_nav_menu_items( \'old_menu_id\' );
register_nav_menu( \'new_theme_menu_location\' );
$new_menu = wp_nav_menu( $args );
return $new_menu;
} else {
return wp_page_menu();
}
}