web-dev-qa-db-fra.com

comment définir plusieurs menus au même emplacement de thème

Dans mon thème, j'ai besoin d'afficher différents menus de gauche sur différentes pages. donc j'inscris un menu secondaire aussi par cette

register_nav_menus(
    array(
      'primary' => __( 'Top Menu' ),
      'left' => __( 'Left Menu' )
    )
  );

et j’ai utilisé un plugin nommé CE WP-Menu per Page pour sélectionner les menus dans la liste déroulante indiquée dans la page de modification, afin de pouvoir attribuer différents menus à différentes pages. et dans mon modèle de page j'ai écrit le code ci-dessous pour afficher les menus

wp_nav_menu( array( 'container' => false, 'menu_id' => 'menu-left-side-menu', 'menu_class' => 'menu', 'theme_location' => 'left' ) );

Dans le tableau de bord-> Apparence-> menus, j'ai créé 3 menus (pour le test, en fait, le nombre de menus dépend du nombre de pages créées). Elles sont

1.top menu
2. left menu1
3. left menu2

et avait assigné primary pour le menu principal et left pour le menu de gauche1. tout a fonctionné parfaitement. mais je dois assigner à gauche menu2 pour une autre page et l'afficher. pour cela, lorsque j'affecte le menu2 de gauche à l'emplacement left, l'assignation précédente du menu1 de gauche remplace. et maintenant gauche menu1 n'est pas affiché dans la page.

Problème

Est-il possible de rendre le menu wordpress supporte l'affectation de plusieurs menus au même emplacement de thème de menu?

J'espère que la description de mon problème est compréhensible. si des éclaircissements sont nécessaires, merci de me le dire.

2
Zammuuz

Vous pouvez utiliser is_page conditionnel pour définir différents éléments de menu comme vous le souhaitez.

if ( is_page( 'About' ) ) {

    wp_nav_menu( array( 'container' => false, 'menu_id' => 'menu-left-side-menu', 'menu_class' => 'menu', 'theme_location' => 'about-page' ) );

} elseif ( is_page( 'Services' ) ) {

    wp_nav_menu( array( 'container' => false, 'menu_id' => 'menu-left-side-menu', 'menu_class' => 'menu', 'theme_location' => 'services-page' ) );

} elseif ( is_page( 'Contact' ) ) {

    wp_nav_menu( array( 'container' => false, 'menu_id' => 'menu-left-side-menu', 'menu_class' => 'menu', 'theme_location' => 'contact-page' ) );

} else {

    wp_nav_menu( array( 'container' => false, 'menu_id' => 'menu-left-side-menu', 'menu_class' => 'menu', 'theme_location' => 'default-menu' ) );

}

Et vous pouvez définir autant de menus que vous le souhaitez dans votre thème.

register_nav_menus(
    array(
        'about-page' => __( 'About Page Menu' ),
        'services-page' => __( 'Services Page Menu' ),
        'contact-page' => __( 'Contact Page Menu' ),
        'default-page' => __( 'Default Page Menu' ),
        'left' => __( 'Left Menu' )
    )
);

Si vous ne souhaitez pas utiliser beaucoup de menus, vous pouvez simplement ajouter tous les éléments dans un seul menu et masquer les éléments de menu non requis sur chaque page à l'aide des classes de corps WordPress et les styles CSS.

1
Robert hue