space.gif
space.gif space.gif
space.gif

Publié par George le 12 août 2009

space.gif

Utiliser et configurer plusieurs sidebar dans votre thême Wordpress

La plupart des thêmes Wordpress utilisent une sidebar widgetisable, voire, de temps à autre deux ou trois. Il peut toutefois être utile si vous décidez de créer votre propre thême de personnaliser un peu plus ces éléments. L’on peut par exemple imaginer avoir une sidebar différente pour le template home.php, single.php, search.php, etc. La multiplication des sidebar est relativement simple à mettre en place. Encore faut-il le faire proprement, afin de pouvoir notamment les différencier dans l’administration des widgets de Wordpress.

Comment faire :

Tout d’abord, créez un fichier par sidebar, sur le modèle du fichier sidebar.php. Nommez ces nouveaux fichiers « sidebar-lenomdemasidebar.php ». Voici à quoi pourrait ressembler le fichier sidebar-lenomdemasidebar.php :

<div id="lenomdemasidebar"><!-- vous pourrez ainsi avoir une css spécifique pour cette sidebar -->
	<ul>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('lenomdemasidebar')) : /* c'est ici que vous appelez la sidebar désirée */ ?>
		<?php endif;?>
	</ul>
</div>

Pour inclure une (ou plusieurs) sidebar dans un fichier de template (single.php par exemple), utilisez la fonction suivante :

<?php get_sidebar(lenomdemasidebar); ?>

Afin de faire fonctionner correctement vos sidebar, il ne vous reste plus qu’à modifier le fichier « functions.php » de votre thême. Vous pourrez également ainsi contrôler l’HTML encadrant les widgets et leur titre, et « nommer » comme vous le désirez (de manière explicite, c’est tellement plus agréable) chacune de vos sidebar.

<?php
/**
 * @package WordPress
 * @subpackage Glob's Theme
 */
 
if ( function_exists('register_sidebar') ) {
	$sidebar1 = array(
		'before_widget' => '<li id="%1$s" class="widget %2$s">',
		'after_widget' => '</li>',
		'before_title' => '<h2>',
		'after_title' => '</h2>',        
		'name'=>'lenomdemasidebar', 
/* C'est ici que se défini le nom de votre sidebar. 
Il sera utilisé lors de l'appel de la fonction get_sidebar(lenomdemasidebar) dans votre template. 
C'est également le nom que vous verrez dans l'admin de Wordpress */ 	
	);
	$sidebar2 = array(
		'before_widget' => '<li id="%1$s" class="widget %2$s">',
		'after_widget' => '</li>',
		'before_title' => '<h2>',
		'after_title' => '</h2>',        
		'name'=>'Une autre sidebar',	
	);
	$sidebar3 = array(
		'before_widget' => '<li id="%1$s" class="widget %2$s">',
		'after_widget' => '</li>',
		'before_title' => '<h2>',
		'after_title' => '</h2>',        
		'name'=>'Et encore une',	
	);
	register_sidebar($sidebar1);
	register_sidebar($sidebar2);
	register_sidebar($sidebar3);
}
Facebook
Twitter
A lire également, sur le blog et ailleurs :
4 commentaires
  • [...] adéquates au moment opportun. Certes, en cherchant bien, on finit effectivement par dénicher des tutos relativement clairs… mais allez, ça me fait plaisir de vous exposer les choses à ma façon [...]

  • AnthonyB (2 comments) dit :

    (je repost donc mon commentaire car mes balises div et php ne sont pas apparue. je vous retire donc les accolade . tant pis sa va faire moche mé fodra faire avec !!! )

    Bonjour et merci pour ces explications. C’est pile poil ce que je cherchais à mon problème de sidebar différentes pour deux sortes de pages.

    Néanmoins subsiste un problème car même en ayant suivi à la lettre les étapes de ce tuto (sauf php get_sidebar(lenomdemasidebar); qui devrait être plutôt php get_sidebar(‘lenomdemasidebar’); , enfin je crois …) mon site (basé sur le fonctionnement du theme Kubrick) affiche tout de même une sidebar par défaut.

    Je m’explique :

    1) Sidebar 1

    • dans le fichier sidebarecole.php il y a :

    php if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(’sidebarecole’) ) :
    … et tout le reste du contenu à savoir la liste des Pages seulement.

    • dans le fichier ecole.php (template de la page « école ») il y a :

    php get_sidebar(’sidebarecole’);

    2) Sidebar 2

    • dans le fichier sidebaractualites.php il y a :

    php if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(’sidebaractualites’) ) :
    … et tout le reste du contenu à savoir la liste des Catégories et des Archives seulement.

    • dans les fichiers index.php, archive.php il y a :

    php get_sidebar(’sidebaractualites’);

    • dans le fichier single.php il y a :

    php if(is_category(6)) {
    php get_sidebar(’sidebarecole’);
    php }else{
    php get_sidebar(’sidebaractualites’);
    php }

    3) Fonction

    dans le fichier fonction.php il y a :

    if ( function_exists(‘register_sidebar’) ) {
    $sidebar1 = array(
    ‘before_widget’ => ‘li id= »%1$s » class= »widget %2$s »‘,
    ‘after_widget’ => ‘/li’,
    ‘before_title’ => ‘h2 class= »widgettitle »‘,
    ‘after_title’ => ‘/h2′,
    ‘name’ => ’sidebarecole’,
    );
    $sidebar2 = array(
    ‘before_widget’ => ‘li id= »%1$s » class= »widget %2$s »‘,
    ‘after_widget’ => ‘/li’,
    ‘before_title’ => ‘h2 class= »widgettitle »‘,
    ‘after_title’ => ‘/h2′,
    ‘name’ => ’sidebaractualites’,
    );
    register_sidebar($sidebar1);
    register_sidebar($sidebar2);

    }

    4) Conclusion

    En définitive, et comme je le rapportais plus haut, le thème affiche quoi qu’il en soit une sidebar de je ne sais où, surement par défaut car il y a la liste des pages, archives, catégories, meta, liens et module de recherche. Chose que je ne veux pas (vu plus haut)

    Par contre je retrouve bien dans l’espace admin>widget les deux sidebar. Et si je mets à la première le widget « pages » et à la deuxième le widget « catégories » par exemple, eh bien le theme affichera le module « page » seulement.

    Je n’y comprend plus rien !!!
    Quelqu’un voit-il une solution car sincèrement je désespères depuis plusieurs heures … snif !

    Merci d’avance

  • AnthonyB (2 comments) dit :

    HEUREKA ! J’ai trouvé !!!

    … Juste un problème de nomenclature de fichier :
    Dans mon cas je dois nommer mes fichiers php des sidebar comme suit :
    sidebar-sidebarecole.php et sidebar-sidebaractualites.php !!!

    Bon ça fait très moche comme ça, mais bon, cela fonctionne alors … pensez à bien nommer vos fichiers !!!

    (encore désolé pour les trois posts de tout à l’heure)

    En espérant que cela serve de leçon à un prochain lecteur …

  • George George (56 comments) dit :

    La solution est en effet de nommer ses fichiers comme ceci : sidebar-nomdelasidebar.php
    et de les appeler ce cette façon :
    if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(’nomdelasidebar’) ) :

    Je suis content d’avoir pu t’aider par ce tuto, même si tu as trouvé seul la solution à ton problème de nommage ;)

Laisser un commentaire

Subscribe without commenting

space.gif
space.gif