web-dev-qa-db-fra.com

Définir le menu de navigation actif à partir d'un plugin

Est-il possible de définir l'option suivante à partir d'un plugin WordPress, si vous connaissez le nom du menu que vous souhaitez définir: enter image description here

Mon développeur dit que ce n'est pas possible, mais je suis sûr que l'un de vous, les gourous, sait comment s'y prendre;)

1
Paul

Vous pouvez utiliser le filtre wp_nav_menu_args ( Référence Codex ) pour définir un emplacement de thème afin d’utiliser un menu spécifique.

Exemple:

function test_wp_nav_menu_args( $args = '' ) {
    // only set menu for the primary navigation menu.
    if ( $args['theme_location'] != 'primary' ) {
        return $args;
    }
    // change {main-menu} to be the slug of the menu you want to set.
    $args['menu'] = 'main-menu';
    return $args;
}
add_filter( 'wp_nav_menu_args', 'test_wp_nav_menu_args' );
1
Rachel Baker

Vous pouvez utiliser get_theme_mod et set_theme_mod pour enregistrer les emplacements du menu de navigation.

Obtenir des emplacements:

$locations = get_theme_mod( 'nav_menu_locations' );
var_dump( $locations );

impressions:

Array
(
    [primary] => 0
    [secondary] => 0
)

Obtenir les menus de navigation existants:

$nav_menus = get_terms( 'nav_menu', array( 'hide_empty' => true ) );
var_dump( $nav_menus );

impressions:

Array
(
    [0] => stdClass Object
        (
            [term_id] => 2
            [name] => Main
            [slug] => main
            [term_group] => 0
            [term_taxonomy_id] => 2
            [taxonomy] => nav_menu
            [description] => 
            [parent] => 0
            [count] => 3
        )
}

Définir l'emplacement:

$nav_menu_id = $nav_menus[0]->term_id;
$location = 'primary';
$locations[ $location ] = $nav_menu_id;
set_theme_mod( 'nav_menu_locations', $locations );
1
Milo