Depuis WordPress 3.0, il n’a jamais été aussi facile de créer et modifier des menus de navigation. Cette fonctionnalité n’en reste pas moins compliquée à utiliser si votre thème ne prend pas en charge les emplacements de menus.
Dans ce tutoriel, nous verrons comment définir un emplacement de menu de navigation personnalisé.
Autrement dit, il vous sera possible d’indiquer directement depuis le module Apparence puis Menus, où ce dernier devra s’afficher en sélectionnant l’un des emplacements que nous aurons spécifié.
Étape n°1 – Modification du fichier functions.php
N.B : prenez garde à ne pas dupliquer cette fonctionnalité si votre thème supporte en natif cette fonctionnalité. Faites donc une recherche préalable via la commande Rechercher de votre navigateur.
Comme souvent, il nous faut éditer le fichier functions.php présent dans le dossier /wp-content/themes/NOM_DU_THEME/functions.php accessible via un client FTP.
Vous pouvez également passer par le module Apparence puis Editeur.
En fin de fichier, ajoutez les lignes de code suivantes – code modifié le 27/08/2012 :
register_nav_menus( array( 'Top' => 'Navigation principale', ) );
Ce bout de code aura pour effet de créer 2 emplacements de menu pour votre thème et d’initialiser la fonction de créations de menus.
Étape n°2 – Modification de votre thème WordPress
Évidemment, cette technique présuppose d’avoir insérer dans votre thème, la fonction qui va afficher le menu en question.
<?php wp_nav_menu( array( 'theme_location' => 'Top' ) ); ?>
Cette commande va donc afficher le menu Top que vous pouvez créer / modifier depuis l’administration de WordPress. A insérer généralement dans le fichier header.php.
Étape n°3 – Choix de l’emplacement des menus
Retournez ensuite dans Apparence puis Menus. Remarquez l’apparition d’une nouvelle boite de paramètres reprenant le titre des emplacements. Une liste déroulante vous permet alors de sélectionner le menu à afficher.
Dans notre exemple, WordPress traduit les mots « top » et « footer » par leur équivalent français de façon automatique.

Choisissez l’emplacement de votre menu de navigation
Vous êtes désormais capable de définir des emplacements de menus de navigation dans votre thème WordPress. Pratique, non ?
Crédits photo : Jim Linwood
Podcast: Télécharger (Durée: 5:32 — 110.3MB)







Bonjour,
Impossible de faire apparaitre le menu personnalisé en pied de page… Je sèche complètement malgré votre excellent travail…
Merci de m’apporter votre aide
Bonne soirée
Tricepa
Pour obtenir de l’aide, il existe le forum de WordPress francophone. Je suis débordé pour vous apporter une aide personnalisée.
Salut, super tuto. Génial!!
Merci !
J’ai testé mais mon thème ne prends pas les menus de base. même après quelques modifs il me garde le menu de base, bizarre ….
Idem ! J’ai toujours le primary Navigation. L’admin me propose maintenant 3 menus : Primary navigation, Haut et Pied de page. Ça ne me gène pas. J’ai l’impression qu’il n’y a plus de conflits entre les menus. Par contre, j’ai perdu le sous-menu (Pages, Catégories et Articles) et s’est ajouté l’onglet « Accueil » …
Chez moi ce code ne marchait pas comme il faut.
Du coup, en repiquant le code d’un thème defaut de WP, ça marche, car on a vraiment le choix du menu dans le formulaire (le menu n’a pas forcément le nom imposé par le code)
Rajouter les ouvertures et fermetures de code php (je ne savais pas si ca passait en commentaire)…
1) pour créer des emplacements de menus perso dans “Menus”, éditer functions.php :
register_nav_menus( array( ‘menu_1′ => __( ‘Menu 1′, ‘pagelines’ ) ) );
2) A insérer dans la zone (éditer par exemple “page.php”) où faire apparaitre le menu1:
wp_nav_menu( array(‘theme_location’=>’menu_1′,’depth’ => 1, ‘fallback_cb’=>’nav_fallback_simple’) );
Et voila, et pour en créer d’autres, déclinez l’id ‘menu_1′ et le descriptif ‘Menu 1′
Et si vous voulez le formater en colonne /sidebar dans une page, par ex:
‘menu_1′,’depth’ => 1, ‘fallback_cb’=>’nav_fallback_simple’) ); ?>
En sachant que ça zappe sidebar.php pour ne pas répéter, mais qu’il faut que l’option sidebar soit activée
Et pour que ça passe dans un sidebar
(rajouter les ouvertures et fermetures à coté des div et des ?)
div class= »span-8 last »
div id= »sidebar »
?php include (THEMELIB . ‘/apps/ad-sidebar.php’); ?
?php wp_nav_menu( array(‘theme_location’=>’menu_1′,’depth’ => 1, ‘fallback_cb’=>’nav_fallback_simple’) ); ?
?php if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(‘Sidebar’) ) : ?
?php endif; ?
/div
/div
Bonjour,
Tout d’abord sympa l’explication et toujours aussi efficace, un grand merci au chef
Mais voilà J’ai un petit soucis que je ne comprend pas, J’ai suivi l’instruction et je vois afficher le menu sauf que le contenu de ce menu (haut en question) affiche les pages.
malgré que je pointe un menu spécifique ça marche pas.
merci d’avance de votre avis
Finalement j’ai réussi à afficher seulement j’ai accueil par défaut comment je fait pour l’enlever?
Aussi, les catégorie s’affiche l’un sur l’autre comment faire pour qu’il soit l’un à côté de l’autre ?
merci
Vérifies que ton thème n’ajoute pas une ligne de code pour le lien vers la page d’accueil. Pour l’affichage, sans doute une histoire de CSS à modifier.
Merci Aurélien,
Toujours pas trouvé de solution pour mon problème, je nage mais je suis pas encore noyé…
C’est difficile de savoir sans accès au back office ou au fichiers du thème. Je peux néanmoins de proposer une prestation payante à un prix très raisonnable.
Contactes-moi si tu le désires.
J’ai essayé en mettant ‘Top’ ) ); ?> dans le header mais il faut plutôt mettre :
‘top-navigation’ ) ); ?>
bonjour,
jai voulu mettre en pratique votre tuto,
jai vérifié que le code n’exister pas déjà dans mon fichier
je l’ai copié collé
seulement voila problème , un message d’erreur est apparut :
Parse error: syntax error, unexpected ‘<' in /homez.68/stephanend/www/wp-content/themes/minimatica/functions.php on line 733
et je ne peux plus rien modifié, je ne peux plus accéder à mon wordpress.
même après déconnexion, lorsque j'essaye de me reconnecter, ce message s'affiche.
pouvez vous m'aider si il vous plaît.
je suis perdue et désespérée
merci
Le message d’erreur indique que la ligne 733 pose soucis. A priori, la balise ouvrante est en double ou n’aurait pas du être insérée.
Pour modifier le fichier functions.php, il faut passer par le client FTP (FileZilla pour ne citer que lui) et modifier le fichier présent dans /wp-content/themes/NOM_DU_THEME/functions.php
Il n’y a aucune raison de paniquer : rien de grave !
A l’avenir j’indiquerai comment être plus prudent.
peut être il serait bien de mettre un lien vers http://wpchannel.com/creer-menus-personnalises-wordpress-3-0/ pour montrer comment fonctionne le menu personnalisé ?
Mais c’est déjà le cas en intro.
oui mais il faut remonter,jouer de la souris ,moi je pensais à la fin de l’article .
voila je voudrai afficher Le contenu de l’attribut titre du MENU dans les catégories de wordpress. J’ai déja touvé comment afficher la description des catégorie mais il me faut maintenant mettre « l’attribut titre »
Comment faire ?
Quelle est la fonction qui permettrai de faire ça ?
Où ça ?? en page d’accueil ? dans single.php ??dans category.php ou archives.php ?
catégory.php
Juste une suggestion,si quelqu’un tombe sur ce tutoriel pendant la création de son thème,peut être aura-t-il besoin de la partie CSS pour faire son menu.
Pour le CSS, je ne peux que donner une idée générale car tout le monde voudra un menu à son goût. Là encore, reprendre le code du thème par défaut est une bonne solution.
c’est ce que j ‘ai fait mais est ce que tout le monde va penser à faire ça?
Bien sûr que les gens voudront personnaliser leur menu mais donner une base, un css générique serait bien et en plus cela indique que le php ne suffit pas, il ne faut pas oublier de mettre du css.
le code est vraiment correct ?
array( ‘top-navigation’ => __( ‘Top’ )
pour functions.php
‘Top’ ) ); ?>
pour header
selon Guy sur wordpress-fr.net, dnas functions.php cela devrait être
array( ‘top’ => __( ‘Top’ )
car sinon on donne 2 noms différents au menu.
‘identifiant du menu ‘top-navigation’ + le texte qui sera affiché dans Apparence/menus de l’administration de WordPress (c’est pour cela qu’il est « traduisible ») mais ce dernier n’est pas utilisé pour afficher le menu dans le thème.
Code modifié car l’article datait un peu… merci d’essayer à nouveau !
Bonjour,
Gros problème ! J’ai insérer le code de l’étape 1 :
__( ‘Top’ ), ‘footer-menu’ => __( ‘Footer’ ))
);
}
?>
dans mon ficher fonctions.php et maintenant plus rien de fonctionne. Ni l’admin, si mon blog. J’ai ce message d’erreur :
Parse error: syntax error, unexpected ‘<' in /homez.514/desclics/www/wp-content/themes/eliteminimal/functions.php on line 539
Merci d'avance pour votre aide
J’ai modifié les lignes de code par quelque chose de beaucoup plus récent. Merci de réessayer !
C’est bon j’ai réparé
mais du coup je ne sais plus du tout comment faire pour permettre d’afficher un menu :s
Je vois que tu utilises le plugin « Post From Site » pour tes commentaires. Saurais-tu m’aider à ce sujet ? Je l’utilise également sur mon site mais lorsque j’appuie sur ‘poster’, comme toi par exemple sur ton bouton « Laisser un commentaire », j’ai un message d’erreur : {« image »: »single », »error »: »", »success »: »Votre recette a bien été ajoutée. Patientez quelques secondes pour revenir sur la page d’accueil. », »post »:280}.
Pourrais-tu m’aider ?
Non pas besoin de plugin pour gérer des commentaires sous WordPress.
Perso j’utilise le theme genesis – studiopress
Il y a un widget menu qui permet de placer ses menus n’importe ou sans coder
Euh… la même chose est fournie de base sous WordPress aussi.
Je l’ai testé sur deux sites différents mais qui utilisent le même template. Sur l’un, tout fonctionne, mais sur l’autre, ça ne fonctionne pas! Est-ce que ça peut dépendre de mon hébergeur?
normalement non, il faut l’url des 2 sites.
J’utilise le template Stripey. Peux-être que ça peut vous donner un indice ou peut-être que c’est facile pour vous de vérifier avec ce template. Merci pour votre support!
J’ai trouvé la solution à mon problème. J’ai installé le plugin Excludes Pages et j’ai coché les pages que je ne voulais pas voir apparaître dans mon menu.
Tuto simple et explicite. Pour ma part j’ai rencontré aucune difficulté. Et l’accent du formateur pour le parisien que je suis, m’envoie une dose de soleil qui me met de bonne humeur !!
Parfait pour moi, j’ai du adapter un peu mais ça collait à mon besoin, merci
Petite question, le top est écrit différemment dans chaque code, une fois avec t et l’autre T. Est-ce que cela a une influence ?
Sur l’orthographe oui quand cela apparaîtra dans Apparence > Menu (pour le ‘top’ concerné).
il y a une erreur le « top » doit être écrit en minuscule : ‘top’ ) ); ?>
Corrigé !