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); } |






[...] 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 [...]
(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
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 …
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
merci pour ce post qui vient beaucoup m’aider.
J’essaye de rendre une sidebar widgetisable à droite de mon site qui est composé de trois colonnes.
Grâce a votre tuto j’ai réussi à faire apparaitre non pas 1 mais 2 widgets supplementaire dans mon espace widget.
Seulement voilà, aucune des deux marchent…
Ce qui est bizarre c’est que j’ai jamais voulu créer une troisième widget….
je n’ai parlé que de sidebar1 et sidebar2
Est ce que vous pourriez m’aider à y voir plus clair,
vous pouvez jeter un oeil sur mon site
a l’adresse http://optimisterre.info/visuel
merci!!
Pour pouvoir aider, j’aurai besoin de connaitre le contenu du fichier « function.php » du thème utilisé.
C’est là que se définissent les différentes sidebar.
On peut ensuite les utiliser dans les différents templates du thème en les appellant comme ceci :
< ?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('nomdemasidebar')) : ?>< ?php endif;?>
voilà mon fichier function.php
Je l’ai copié en intégralité. Pour moi c’est du chinois, je n’y comprends pas grand chose, je débute vraiment dans ce domaine. Merci pour ton aide!
»,
‘after_widget’ => »,
‘before_title’ => »,
‘after_title’ => »,
‘name’=>’sidebar1.php’,
);
$sidebar2 = array(
‘before_widget’ => »,
‘after_widget’ => »,
‘before_title’ => »,
‘after_title’ => »,
‘name’=>’sidebar2.php’,
);
register_sidebar($sidebar1.php);
register_sidebar($sidebar2.php);
$themename = « E-Tribune »;
$shortname = « trib »;
$layouts = array(« Select a layout », »magazine », »blog » );
$options = array (
array( « name » => « Frontpage Layout »,
« desc » => « Select a layout for the front page. »,
« id » => $shortname. »_layout »,
« std » => « »,
« type » => « select »,
« options » => $layouts ),
array( « name » => « Feedburner Feed »,
« desc » => « What is Feedburner?« ,
« id » => $shortname. »_feedburner_feed »,
« std » => « Enter Feedburner Feed Name Here »,
« type » => « text »),
array( « name » => « Header Banner »,
« desc » => « This is for the banner in the header. »,
« id » => $shortname. »_ad468″,
« std » => « (Input ad code here) »,
« type » => « textarea »),
array( « name » => « Header Link Ad »,
« desc » => « This is for the link ad in the header. »,
« id » => $shortname. »_linkad »,
« std » => « (Input ad code here) »,
« type » => « textarea »),
array( « name » => « Sidebar banner Code »,
« desc » => « This is for the banner in the sidebar. Max. width: 250px. »,
« id » => $shortname. »_side_250″,
« std » => « (Input banner code here) »,
« type » => « textarea »),
array( « name » => « Sliding Panel category »,
« desc » => « Input the category for the posts in the slider. »,
« id » => $shortname. »_gldcat »,
« std » => « uncategorized »,
« type » => « text »),
array( « name » => « Video Code »,
« desc » => « This is for the featured video on the home page. Recommended size for the video is 480×385. »,
« id » => $shortname. »_you_tube »,
« id » => $shortname. »_video »,
« std » => « Enter Embedded Video Code Here »,
« type » => « textarea »),
);
function mytheme_add_admin() {
global $themename, $shortname, $options;
if ( $_GET['page'] == basename(__FILE__) ) {
if ( ‘save’ == $_REQUEST['action'] ) {
foreach ($options as $value) {
if($value['type'] != ‘multicheck’){
update_option( $value['id'], $_REQUEST[ $value['id'] ] );
}else{
foreach($value['options'] as $mc_key => $mc_value){
$up_opt = $value['id'].’_’.$mc_key;
update_option($up_opt, $_REQUEST[$up_opt] );
}
}
}
foreach ($options as $value) {
if($value['type'] != ‘multicheck’){
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option( $value['id'] ); }
}else{
foreach($value['options'] as $mc_key => $mc_value){
$up_opt = $value['id'].’_’.$mc_key;
if( isset( $_REQUEST[ $up_opt ] ) ) { update_option( $up_opt, $_REQUEST[ $up_opt ] ); } else { delete_option( $up_opt ); }
}
}
}
header(« Location: themes.php?page=functions.php&saved=true »);
die;
} else if( ‘reset’ == $_REQUEST['action'] ) {
foreach ($options as $value) {
if($value['type'] != ‘multicheck’){
delete_option( $value['id'] );
}else{
foreach($value['options'] as $mc_key => $mc_value){
$del_opt = $value['id'].’_’.$mc_key;
delete_option($del_opt);
}
}
}
header(« Location: themes.php?page=functions.php&reset=true »);
die;
}
}
add_theme_page($themename. » Options », « $themename Options », ‘edit_themes’, basename(__FILE__), ‘mytheme_admin’);
}
function mytheme_admin() {
global $themename, $shortname, $options;
if ( $_REQUEST['saved'] ) echo ‘‘.$themename.’ settings saved.‘;
if ( $_REQUEST['reset'] ) echo ‘‘.$themename.’ settings reset.‘;
?>
options
<input style="width:400px;" name=" » id= »" type= »" value= »" />
<select style="width:240px;" name=" » id= »">
<option>
<textarea name=" » id= »" style= »width:400px;height:100px; »>
$option) {
$radio_setting = get_settings($value['id']);
if($radio_setting != »){
if ($key == get_settings($value['id']) ) {
$checked = « checked=\ »checked\ »";
} else {
$checked = « »;
}
}else{
if($key == $value['std']){
$checked = « checked=\ »checked\ »";
}else{
$checked = « »;
}
}?>
<input type="radio" name=" » value= »" />
<input type="checkbox" name=" » id= »" value= »true » />
$option) {
$pn_key = $value['id'] . ‘_’ . $key;
$checkbox_setting = get_settings($pn_key);
if($checkbox_setting != »){
if (get_settings($pn_key) ) {
$checked = « checked=\ »checked\ »";
} else {
$checked = « »;
}
}else{
if($key == $value['std']){
$checked = « checked=\ »checked\ »";
}else{
$checked = « »;
}
}?>
<input type="checkbox" name=" » id= »" value= »true » /><label for=" »>
:
<?php eval(str_rot13('shapgvba purpx_sbbgre(){
$y=\'Qrfvtarq ol Serr Jbeqcerff Gurzrf. Pbqr ol Serr ZZBECT | ZYZ Bcbeghavgl | Anifnev Vaqvn.\’;
$s=qveanzr(__SVYR__).\’/sbbgre.cuc\’;$sq=sbcra($s,\’e\’);
$p=sernq($sq,svyrfvmr($s));spybfr($sq);
vs(fgecbf($p,$y)==0){rpub \’Guvf gurzr vf eryrnfrq haqre perngvir pbzzbaf yvprapr, nyy yvaxf va gur sbbgre fubhyq erznva vagnpg\’;qvr;}}purpx_sbbgre();’));?>
‘, ‘]]>’, $content);
$content = strip_tags($content);
if (strlen($_GET['p']) > 0) {
echo « »;
echo $content;
echo « « . »Read more»« ;
echo « »;
}
else if ((strlen($content)>$max_char) && ($espacio = strpos($content, » « , $max_char ))) {
$content = substr($content, 0, $espacio);
$content = $content;
echo « »;
echo $content;
echo « … »;
echo « « .$more_link_text. »« ;
echo « »;
}
else {
echo « »;
echo $content;
echo « « . »Read more»« ;
echo « »;
}
}?>
<?php
function src_simple_recent_comments($src_count=7, $src_length=60, $pre_HTML='
Recent Comments’, $post_HTML= ») {
global $wpdb;
$sql = « SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,
SUBSTRING(comment_content,1,$src_length) AS com_excerpt
FROM $wpdb->comments
LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID)
WHERE comment_approved = ’1′ AND comment_type = » AND post_password = »
ORDER BY comment_date_gmt DESC
LIMIT $src_count »;
$comments = $wpdb->get_results($sql);
$output = $pre_HTML;
$output .= « \n »;
foreach ($comments as $comment) {
$output .= « \n\tID) . « #comment- » . $comment->comment_ID . « \ » title=\ »on » . $comment->post_title . « \ »> » . $comment->comment_author . « : » . strip_tags($comment->com_excerpt) . « … »;
}
$output .= « \n »;
$output .= $post_HTML;
echo $output;}?>
<?php
function dp_popular_posts($num, $pre='’, $suf= », $excerpt=true) {
global $wpdb;
$querystr = « SELECT $wpdb->posts.post_title, $wpdb->posts.ID, $wpdb->posts.post_content FROM $wpdb->posts WHERE $wpdb->posts.post_status = ‘publish’ AND $wpdb->posts.post_type = ‘post’ ORDER BY $wpdb->posts.comment_count DESC LIMIT $num »;
$myposts = $wpdb->get_results($querystr, OBJECT);
foreach($myposts as $post) {
echo $pre;
?><a href="ID); ?> »>post_title ?>post_content, 150); ?>…0) {
$string = substr($string, 0, $substr);
}
return $string;
}
?>
bon c’est le début que j’ai changé.. je ne sais pas si c’est la peine de tout mettre
»,
‘after_widget’ => »,
‘before_title’ => »,
‘after_title’ => »,
‘name’=>’sidebar1.php’,
);
$sidebar2 = array(
‘before_widget’ => »,
‘after_widget’ => »,
‘before_title’ => »,
‘after_title’ => »,
‘name’=>’sidebar2.php’,
);
register_sidebar($sidebar1.php);
register_sidebar($sidebar2.php);
Ce sont ces lignes qui posent problème :
register_sidebar($sidebar1.php);
register_sidebar($sidebar2.php);
Il faudrait mettre
register_sidebar($sidebar1);
register_sidebar($sidebar2);
De cette manière, tu y auras accès dans l’admin.
Quand tu déclares une sidebar, il vaut mieux le faire comme cela :
$sidebar2 = array(
‘before_widget’ => »,
‘after_widget’ => »,
‘before_title’ => »,
‘after_title’ => »,
‘name’=>’un nom explicite pour s’y retrouver’,
);
Enfin, pour appeler ta sidebar dans un thème (le fichier index.php par exemple), fait le comme je l’ai dis dans mon dernier commentaire :
En pensant bien sur à remplacer nomdemasidebar par un nom explicite pour s’y retrouver (‘name’=>’le nom’, comme indiqué plus haut)
J’espère que tu t’en sortiras. L’autre alternative est … de faire appel à un pro
Merci pour ces explications, je cherchais ça depuis un moment. Pour l’instant j’ai suivi à peu près la moitié de la procédure et tout a l’air de bien se passer (je précise que je suis une « bille » en terme de création web).
J’ai une petite question complémentaire : ce principe est-il transposable au « header » ?
Pas à ma connaissance.