J'ai développé un thème WordPress. Je veux pouvoir, une fois activé, regarder s'il y a déjà un menu créé dans le backend. S'il existe, choisissez-le et utilisez-le comme menu principal, mais créez un nouveau menu avec les pages de niveau supérieur déjà existantes et enregistrez-le en tant que menu principal.
Je n'arrive pas à trouver grand chose à ce sujet. Quelqu'un peut-il nous éclairer?
Nous avons trouvé du code qui vérifie le menu par défaut actuel répertorié ci-dessous.
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 );
}
}
Cela fonctionne bien, tout ce que nous devons trier maintenant, c’est si aucun navigateur principal n’est sélectionné. C'EST À DIRE. sur une nouvelle installation du thème
Vous pouvez utiliser has_nav_menu()
pour vérifier si un emplacement lui est attribué. Si tel est le cas, utilisez wp_get_nav_menu_items()
pour dupliquer le menu, puis affectez-le à l'emplacement que vous avez enregistré dans votre thème.
Voici ce que j'ai en tête. Cela me vient à l'esprit et il me faudra plus de code et de tests, mais j'espère que c'est un bon début pour vous:
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();
}
}