Vu qu'on m'a posé certaines questions là dessus cette semaine, ça va faire le sujet de l'article d'aujourd'hui.
Ajouter une seconde zone de widgets
Depuis la version 2 (il me semble) de WordPress, si le thème est bien fait, on peut depuis le panneau d'administration ajouter des widgets dans certaines zones bien définies. Dans le thème par défaut, il y a une zone unique pouvant accueillir des widgets, qui se trouve dans la barre latérale. Mais on peut vouloir en ajouter d'autres.
Pour ajouter une nouvelle zone, il faut effectuer deux modifications dans le code du thème :
-
Premièrement, il faut "enregistrer" une nouvelle zone pour que celle-ci soit disponible dans le menu de sélection des zones. Pour cela il faut en général se rendre dans le fichier
functions.php
du thème et rechercher où est appelée la fonctionregister_sidebar
(dans le thème par défaut, c'est tout en haut du fichier) et l'appeler une fois de plus pour enregistrer une nouvelle zone.Cette fonction peut optionnellement prendre en argument un tableau de paramètres permettant de personnaliser le code HTML qui enrobera la liste de widgets. Dans la plupart des cas on n'en a pas besoin mais au cas où c'est bon de savoir que c'est possible, notamment pour éventuellement spécifier une classe particulière à l'une ou l'autre zone en vu d'appliquer des styles différenciés.
Une fois cela fait, la nouvelle zone est disponible dans le menu de sélection des zones du panneau d'administration (cf la capture d'écran ci-dessus).
-
Dans un deuxième temps, il faut inclure cette zone dans le rendu de la page à un endroit ou un autre (sinon, forcément, ça sert pas à grand chose). Pour cela il suffit d'intégrer le code suivant dans l'un des fichiers de template :
<?php dynamic_sidebar(n); ?>
en prenant garde de bien remplacer le paramètre "n" par un entier représentant le numéro de la zone que vous voulez afficher.Par exemple, si vous venez d'ajouter une zone et qu'il y en avait une seule avant, la nouvelle aura fort logiquement le numéro 2 et le code à insérer sera le suivant :
<?php dynamic_sidebar(2); ?>
N'afficher certaines choses que sur la page d'accueil
Afin de ne pas trop surcharger les pages, on peut ne vouloir afficher certaines informations et liens que sur la page d'accueil. Par exemple sur ce site, les encarts "Mes autres sites", "News du serveur" et "Divers" ne s'affichent que sur la page d'accueil (et les pages de contenu fixe).
Pour restreindre l'affichage d'une portion de code d'un fichier de template, c'est très simple :
WordPress propose quelques fonctions PHP qui testent dans quel type de page on se trouve et qui peuvent servir à composer la condition (qui remplacera la portion "[CONDITION]" du code ci-dessus). Ces fonctions sont définies dans le fichier wp-includes/query.php
et comprennent notamment :
is_home()
disant si l'on se trouve sur la page d'accueil.is_page()
disant si l'on se trouve sur une page de contenu fixe.is_search()
disant si l'on est dans la page de recherche.is_404()
disant si l'on se trouve sur la page d'erreur 404.- etc.
Pour composer la condition, il suffit d'appeler une ou plusieurs de ces fonctions séparées par une double barre verticale (||
) qui représente un "ou" en PHP.
Par exemple pour ajouter une zone de widgets qui ne sera affichée que sur la page d'accueil et les page de contenu fixe, on utilisera le code suivant :
Et ça marche que pour la barre latérale ?
Bien entendu ces deux "astuces" sont valables aussi bien pour la barre latérale que pour n'importe quelle autre partie de votre site. Mais c'est dans la barre latérale que c'est le plus souvent utilisé.