Plus : Ajouter la fonction de menu personnalisé

La possibilité de créer un menu personnalisé a été ajoutée pour la version 3 de Wordpress. Très utile, mais encore faut-il pouvoir l’ajouter. Ce petit article pour ajouter un menu à un thème en cours de création ou updater un thème existant.

Précédent | 13/19 | Suivant

Créér un menu

Les menus se créent dans l’administration de wordpress, par un système "drag and drop". On peut ajouter dans les menus dans l’ordre désiré pages, posts, liens libres, catégories, tags.
Attention : pour que "Menu" apparaissent dans la liste, il faut que le thème accepte les widgets, et donc que le fichier "functions.php" existe et soit configuré. Etrange, mais c’est comme ça.

Le code dans la page "fonctions.php", pour déclarer un seul menu, sera celui-ci :

<?php
register_nav_menu( 'premier-menu', __( 'Premier menu' ) );
?>

Dans le cas où l’on veut utiliser plusieurs menus, on écrira :

<?php
register_nav_menus(
        array(
                'premier-menu' => __( 'premier menu' ),
                'second-menu' => __( 'Second menu' ),
                'troisieme-menu' => __( 'Troisième Menu' )
        )
);
?>

On remarquera que le premier mot dans la liste est le "nom de code" (pour la base de donnée) est sans accents ni espaces, et le deuxième (en français) sera affiché dans l’administration de Wordpres.

Code de base

Appeller le menu personnalisé se fait par la fonction de wordpress. Généralement cet ajout se fait là où un menu par défaut (le listage des pages par exemple) existe déjà. La plupart du temps, dans le fichier header.php du thème, s’il est conçu selon les "bonnes pratiques" de wordpress.

<?php wp_nav_menu(); ?>

Cette fonction, écrite sans arguments, affiche le premier menu trouvé dans l’administration du site. Elle suffit la plupart du temps.

Si il y a plusieurs menus ou si on veut être plus propre, on écrira :

<?php wp_nav_menu(
   array( 'theme_location' => 'premier-menu',
       'container_class' => 'menu1'
) );
?>

’theme_location’ désigne le nom du thème à inclure, en accord avec ce qui a été déclaré dans le fichier functions.php. Le container_class est la classe qui sera associée avec le thème.

S’il y a plusieurs menus, on associera chaque menu avec la petite fenêtre supplémentaire qui s’affiche automatiquement dans la sonfiguration du menu.

Si vous voulez afficher les pages du site à l’endroit du menu si aucun menu n’a été créé, il faut alors ajouter un "function_exists" (cela rend aussi le thème compatible avec des versions plus anciennes de Wordpress :

<?php /* si un menu existe, l'utiliser */ if (function_exists('wp_nav_menu')) { ?>
<?php wp_nav_menu(); ?>
<?php /* Sinon lister les pages */ } else { ?>
<?php wp_list_pages('title_li='); ?>
<?php } ?>

On peut aussi être plus précis et demander d’afficher quelque chose si un menu spécifique n’a pas été créé, graâce à la fonction "has_nav_menu" :

<?php if ( has_nav_menu( 'premier-menu' ) ) {
        wp_nav_menu( array( 'theme_location' => 'premier-menu', 'container_class' => "menu1" ) );
} else { ?>
        Ce menu n'est pas configuré, je t'aurais prévenu
<?php
}
?>

Pour plus d’info, on se référera alors à la page de documentation de wordpress qui se trouve ici.