Menus personnalisables

Menus personnalisables

Tutoriel publié en novembre 2011 par Galdon dans la catégorie Wordpress

Ceci est le dernier chapitre de ce cours sur comment créer un thème wordpress.

Nous allons voir comment rendre un thème compatible avec les menus personnalisables introduits récemment dans la version 3.0 de Wordpress :

Menus personnalisés WordpressExactement comme vu précédemment avec la sidebar, il est nécessaire de déclarer les menus dans le fichier functions.php de votre thème, grâce à la fonction register_nav_menus(). Quand on déclare un menu, il faut lui donner un identifiant qui nous permettra de l'appeler plus tard dans les templates de notre thème, appelons donc notre menu header puisqu'il va s'afficher... dans le header !

// Menus de navigation
register_nav_menus(array(
	'header' => 'Menu principal (header)'
));

"Menu principal (header)" est le libellé qui apparaitra dans la partie administration : Apparence > Menus > Emplacements du thème, qui permet de définir quel menu sera utilisé à l'emplacement header.

Déclarer le menu, ça n'est que la première partie du travail, il reste maintenant à afficher ce menu.

La fonction wp_nav_menu() permet justement d'afficher un menu dans votre thème Wordpress, en général on l'appelle dans le template header(fichier header.php) puisque le menu est généralement affiché en haut des pages, dans le header.

Cette fonction prend en paramètre l'identifiant de l'emplacement du menu, que nous avons défini il y a quelques instants dans functions.php : "header" :

<div id="menu" role="navigation">
	<?php wp_nav_menu(array('theme_location' => 'header')); ?>
</div>

Thème compatible avec les menus Wordpress 3

Style CSS du menu

Les menus sont contenus dans un ensemble de listes non ordonnées (<ul>) imbriquées les unes dans les autres pour prendre en charge les sous-menus, voici par exemple un extrait du code HTML du menu que vous voyez sur le screenshot ci-dessus (j'ai supprimé le contenu des attributs class et href + quelques sous-menus pour rendre le code plus lisible) :

<div id="menu" role="navigation">
	<div class="menu-salut-container">
		<ul id="menu-salut" class="menu">
			<li>
				<a href="...">Home</a>
			</li>
			<li id="menu-item-38" class="...">
				<a title="Lien externe" href="...">Finalclap</a>
				<ul class="sub-menu">
					<li id="menu-item-41" class="...">
						<a href="...">Tutoriaux WordPress</a>
						<ul class="sub-menu">
							<li id="menu-item-43" class="...">
								<a href="...">Cours Wp Thème</a>
							</li>
						</ul>
					</li>
					<li id="menu-item-42" class="...">
						<a href="...">Tutoriaux Photoshop</a>
					</li>
				</ul>
			</li>
			<li id="menu-item-36" class="...">
				<a href="...">A propos</a>
			</li>
			<li id="menu-item-34" class="...">
				<a title="Catégorie" href="...">Non classé</a>
			</li>
		</ul>
	</div>
</div>

Le but du jeu va donc être de jongler avec les sélecteurs CSS pour arriver à différencier les liens de premier niveau (Home, A propos...), des sous-menus et sous-sous-menus.

Il faut avoir une bonne maitrise des sélecteurs et des différents opérateurs CSS, donc je vais vous fournir le CSS que j'utilise pour mettre en forme un menu assez générique, comme sur le screenshot ci-dessus :

/*
 *	===================
 *	Menus personnalisés
 *	===================
**/
#menu{
	margin:30px 10px 9px; height:30px;
}
#menu ul{
	list-style:none;
	margin:0; padding:0;
	font:bold 12pt Arial, Helvetica, sans-serif;
}
#menu li{
	position:relative;
	display:block;
	float:left;
	margin-right:1px;
}
#menu a{
	display:block;
	background:#0C85CA; color:#eee;
	text-decoration:none; padding:0 10px; line-height:31px;
}
/* Sous-menu 1 */
#menu ul ul{
	position:absolute; left:0; top:31px; z-index:99999;
	display:none; width:180px; float:left;
	font:lighter 10pt Arial, Helvetica, sans-serif;
	box-shadow:0px 3px 3px rgba(0,0,0,0.2);
}
#menu ul ul li{min-width:180px;}
/* Sous-menu 2 */
#menu ul ul ul{left:100%; top:0;}
#menu ul ul a{
	background:#777; line-height:1em; padding:10px;
	width:160px; height:auto;
}
#menu li:hover > a,
#menu ul ul :hover > a{
	background:#777;
	color:#fff;
}
#menu ul li:hover > ul{display:block;}
#menu ul li.current_page_item > a,
#menu ul li.current-menu-ancestor > a,
#menu ul li.current-menu-item > a,
#menu ul li.current-menu-parent > a{
	background-color:#555;
}

Ce cours de création de thème Wordpress est maintenant terminé, pensez à vous abonner au flux RSS, à la page Facebook ou encore sur Twitter pour rester informé des nouveaux tutoriels publiés sur Finalclap.com, et n'hésitez pas à laisser des commentaires !

Allez donc jeter un oeil sur cette page : appareil photo fondu.

Ce tutoriel fait partie d'un cours : aller au sommaire pour voir les autres chapitres.

14 commentaires :
Seuls les 10 derniers commentaires sont affichés.
Cliquez ici pour afficher tous les commentaires
commentaire n°2121 par Galdon
Galdon jeudi 16 février 2012, 15:57
@Dan: c'est vrai, je n'ai pas beaucoup détaillé la partie CSS (puisque c'est un peu hors sujet), ce que je voulais montrer dans ce chapitre c'est surtout comment déclarer le menu à wordpress.
commentaire n°2146 par Philippe
Philippe dimanche 4 mars 2012, 22:44
Merci beaucoup pour ce tuto.
Grâce à vous, j'ai appris beaucoup de choses et surtout, j'ai réussi à résoudre mon problème sur le menu dynamique de mon site sous WordPress. Je pourrai enfin le mettre très rapidement en ligne :)
commentaire n°2363 par Piou
Piou samedi 22 septembre 2012, 00:10
Bonjour,
Tout d'abord un grand merci pour votre tuto car il m'a beaucoup aidé a avancer. Mais j'ai malgré tout un petit soucis...
En effet, lorsque je place un sous-menu dans le tableau de bord de WP, celui apparait comme une page a part entière lors de l'affichage dans le navigateur.

Dans WP :
Accueil
Galerie
- Print
Contact

Lors de l'affichage de la page :
Accueil Galerie Contact Print


J'espère avoir réussi a définir mon problème convenablement. En vous remerciant, bonne continuation.

Piou.
commentaire n°3434 par Wp addict
Wp addict mardi 3 janvier 2017, 04:27
Je rencontre le même problème !!!
commentaire n°2422 par dessinateurimpulsif
dessinateurimpulsif mercredi 28 novembre 2012, 16:08
De très bons tutoriaux qui permettent de bien dégrossir quand on ne connait pas Wordpress, cependant j'ai cherché dans le code source des pages et je ne vois aucune trace des méta-tags comme "keywords", j'imagine qu'il est possible d'utiliser les champs personnaliser pour ça, mais n'y a t' il pas moyen de modifier le back-office pour rajouter les méta-tags au fur et a mesure?

merci encore.
commentaire n°2424 par Galdon
Galdon mercredi 28 novembre 2012, 23:59
Oui c'est possible d'afficher la valeur d'un champ personnalisé dans une balise <meta name="Description"..., mais qu'est-ce que tu veux dire par "rajouter les méta-tags au fur et a mesure?" ?

Un champ personnalisé est une <textarea> en backoffice, donc oui, il suffit d'ajouter des mots dedans.
commentaire n°2488 par mika
mika vendredi 15 février 2013, 14:07
salut, je vous savoir si ton menu prenais en compte les liens current ou pas. car j'essaie de faire un menu avec les :hover reste active quand on est dans le rubrique.

merci par avance
commentaire n°2978 par Alexandre-66
Alexandre-66 vendredi 16 janvier 2015, 23:59
Bonjour,

J'utilise le menu en mode horizontal pour mon site WordPress. Pour le moment, cela m'affiche toutes mes rubriques y compris les sous-rubriques.

Comment faire pour que les sous-rubriques s'affichent uniquement lorsqu'on est dans sa rubrique parent ?
commentaire n°3435 par Wp addict
Wp addict mardi 3 janvier 2017, 04:28
Je rencontre le même problème !!!
commentaire n°2986 par Nenu
Nenu lundi 26 janvier 2015, 09:13
Un grand merci pour ce tuto qui m'a bien servi!
commentaire n°3433 par Facto
Facto mardi 3 janvier 2017, 01:54
Bonjour à tous et Merci à l'auteur de cet article Grand merci !!! ce tuto m'a été d'une grande utilité Thank you.

Cela dit je vais apporter une contribution quant au problème que j'ai rencontré afin d'aider d'autres qui pourraient être dans la même situation.

en effet en utilisant le code avec "header" le menu ne s'affichait pas malgré plusieurs tentatives...j'ai ajouter "bottom" qui veut dire bas ou en dessous en français j'ai donc utilisé "header bottom" et non pas "header" tout court et cela à fonctionné !!!

Un grand merci pour ce tuto qui m'a bien servi!
commentaire n°3439 par Dev (développeur!)
Dev (développeur!) jeudi 5 janvier 2017, 16:43
Bonjour à tous et merci pour ce article !!! Cependant le menu ne tient pas compte des sous pages et les placent au même niveau que les pages principal (les pages de niveau inférieur ou sous pages sont classés au même niveau que les pages principal) et de surcroît ne tient pas compte de la structure des pages (non seulement il les prends toutes même celles qui ne sont pas ajoutés au menu mais en plus les classes dans l'ordre alphabétique !!!!) besoin d'aide s'il vous plaît, afin de résoudre ce problème. Merci
commentaire n°3527 par Will
Will lundi 14 août 2017, 12:41
Article super utile.
Que Jésus-Christ te bénisse.
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré