web-dev-qa-db-fra.com

Make Theme choisit automatiquement le menu de navigation par défaut

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

3
manc

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();
    }
}
1
Morgan Estes