Vous cherchez un moyen de créer et d'attacher dynamiquement des barres latérales aux pages ou aux articles ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour créer et attacher dynamiquement des barres latérales aux pages ou aux articles.
Cet extrait vous permettra de créer facilement de nouvelles barres latérales en ajoutant simplement le nom à un tableau. Vous pourrez également définir la barre latérale créée dynamiquement lorsqu'une page se charge en sélectionnant dans la boîte méta de sélection de barre latérale personnalisée.
Premièrement, cela créera une nouvelle boîte méta dans l'éditeur de pages vous permettant d'attacher l'une des barres latérales créées dynamiquement. Deuxièmement, vous remarquerez un tableau de noms, par exemple : Barre latérale 01, Barre latérale 02, etc. Ce sont les noms des barres latérales créées dynamiquement que vous pouvez modifier ou auxquelles vous pouvez ajouter de nouvelles barres latérales.
Instructions :
Il vous suffit d'ajouter ce code au fichier functions.php de votre thème ou à un plugin spécifique au site
$dynamic_widget_areas = array(
/* rename or create new dynamic sidebars */
"Sidebar 01",
"Sidebar 02",
"Sidebar 03",
"Sidebar 04",
"Sidebar 05",
"Sidebar 06",
"Sidebar 07",
"Search Template",
);
if ( function_exists('register_sidebar') ) {
foreach ($dynamic_widget_areas as $widget_area_name) {
register_sidebar(array(
'name'=> $widget_area_name,
'before_widget' => '<div id="%1$s" class="widget %2$s left half">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widgettitle">',
'after_title' => '</h3>',
));
}
}
add_action("admin_init", "sidebar_init");
add_action('save_post', 'save_sidebar_link');
function sidebar_init(){
add_meta_box("sidebar_meta", "Sidebar Selection", "sidebar_link", "page", "side", "default");
}
function sidebar_link(){
global $post, $dynamic_widget_areas;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
?>
<div class="link_header">
<?
echo '<select name="link" class="sidebar-selection">';
echo '<option>Select Sidebar</option>';
echo '<option>-----------------------</option>';
foreach ( $dynamic_widget_areas as $list ){
if($link == $list){
echo '<option value="'.$list.'" selected="true">'.$list.'</option>';
}else{
echo '<option value="'.$list.'">'.$list.'</option>';
}
}
echo '</select><br />';
?>
</div>
<p>Select sidebar to use on this page.</p>
<?php
}
function save_sidebar_link(){
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post->ID;}
update_post_meta($post->ID, "_sidebar", $_POST["link"]);
}
add_action('admin_head', 'sidebar_css');
function sidebar_css() {
echo'
<style type="text/css">
.sidebar-selection{width:100%;}
</style>
';
}
Copiez l'extrait de code ci-dessous et remplacez tout le code de votre modèle sidebar.php de votre thème WordPress et vous êtes prêt.
<!-- begin sidebar -->
<div id="sidebar">
<?
global $post;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
if($link != ''){
echo '<ul id="widgets">';
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar($link) ) :
endif;
echo '</ul>';
}
?>
</div>
<!-- end sidebar -->
Remarque : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur la manière de copier / coller correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.
Si vous avez aimé cet extrait de code, n'hésitez pas à consulter nos autres articles sur le site tels que : 10 meilleurs plugins WordPress pour les développeurs web et comment créer un formulaire multipage dans WordPress.
modifier votre code.
Salut Kevin,
Merci pour le code. J'ai besoin d'aide. Je veux afficher la 2ème barre latérale sous la 1ère. Comment puis-je faire cela ?? S'il vous plaît, aidez-moi !!!
salut Kevin
La boîte déroulante ne fonctionne pas dans wordpress3.8. Des idées ?
Salut Kevin.
Je suis un peu nouveau dans ce domaine et j'ai besoin d'un peu d'aide. J'ai installé ce plugin mais j'ai des problèmes avec le CSS, des conseils ?
Au fait, ce plugin est génial !
Si quelqu'un a un problème avec la barre latérale qui ne s'affiche pas, essayez ceci à la place de la partie 2 :
post->ID;
$link = get_post_meta($postid, ‘_sidebar’, true);
if($link != ”){
echo ”;
if (function_exists(‘dynamic_sidebar’) && dynamic_sidebar(($link))) :endif;
echo ”;
} wp_reset_query(); ?>
tout fonctionne très bien,
mais il semble que vous ne sachiez pas quel menu latéral est sélectionné lorsque vous revenez à votre page. Est-ce que je l'ai mal implémenté ? ou y a-t-il un moyen simple d'avoir le menu déroulant présélectionné si le menu latéral de cette page est choisi...
merci
Remarque : Index non défini : _sidebar dans /home/
J'obtiens cette erreur dans la barre latérale dans archive.php et les pages, les articles sans barre latérale sélectionnée.
Ne passe pas le débogage. Des idées ?
Bonjour les amis,
J'utilise le code dans Thesis. Tout me semble parfait sauf une chose.
J'ai renommé "Sidebar 01" en "Product 01" et cela est donc modifié dans ma zone d'édition de publication, mais dans la zone de widgets, il m'affiche toujours "Sidebar 01" et respectivement... Quelqu'un peut-il m'aider pour que le nom dans la zone de widgets puisse également être modifié ?? Merci et Cordialement.
merci pour ça, ça m'a sauvé la journée lol, un problème c'est que ça n'apparaît que dans les articles ou les pages et pas dans les articles et les pages, j'ai résolu ça en ajoutant ce qui suit à la fonction sidebar_init :
add_meta_box("sidebar_meta", "Sélection de la barre latérale", "sidebar_link", "page", "side", "default");J'aimerais cependant que ce soit un peu plus dynamique, comme au lieu de pré-définir le nombre de barres latérales créées, permettre à l'utilisateur administrateur d'entrer une quantité de barres latérales à créer puis d'afficher celles-ci dans la liste déroulante. Des idées comment faire ?
merci pour ce super extrait.
Je cherche à transformer cela en un plugin afin que les gens puissent avoir une interface d'administration pour créer de nouvelles barres latérales.
Daniel, pourriez-vous poster un extrait plus large de ceci ? J'ai implémenté le code ci-dessus dans mon thème, mais je n'étais pas sûr où votre ajout devrait aller... fait-il partie du fichier sidebar.php, ou du fichier functions ?
Question…
Faut-il un certain niveau d'assainissement pour que cela soit ajouté à un thème pour des raisons de sécurité ?
Salut, merci pour cet extrait. Comment puis-je ajouter la sélection aux catégories ?
Si je comprends bien, voulez-vous dire attribuer des barres latérales en fonction de la catégorie ?
Je suis très heureux de cet article et très utile, surtout pour moi. J'espère qu'il sera également utile pour d'autres utilisateurs de WordPress. Excellent travail de votre part, cher Kevin Chard. Merci
Pas de problème, je suis content d'apprendre que le snippet vous plaît.
hmm, je n'arrive pas à faire fonctionner cela. J'obtiens l'erreur suivante : « Indice non défini : _sidebar dans [CHEMIN_THÈME]/functions.php à la ligne 97 »
la boîte de sélection s'affiche sur l'écran de modification de la page, mais aucun des sidebars créés dans le tableau n'apparaît dans le menu déroulant. Des idées pour remédier à cela ?
Salut Chris,
Assurez-vous que votre barre latérale est vide en utilisant simplement le code que j'ai posté ci-dessus. Le _sidebar est l'endroit où les informations sont enregistrées. Où l'erreur est-elle affichée ? est-ce sur la page de l'éditeur ou lorsque vous essayez d'enregistrer votre functions.php ?
Kevin,
Merci pour votre réponse. Lorsque je visite l'écran « Modifier la page » où la boîte méta est ajoutée, les sidebars que j'ai stockés dans le tableau « $dynamic_widget_areas » ne s'affichent pas dans la boîte déroulante « Sélection du Sidebar » comme option. Au lieu de cela, je reçois les erreurs suivantes dans mon journal de débogage :
« Indice non défini : _sidebar dans [CHEMIN_THÈME]/functions.php à la ligne 110 »
« Avertissement PHP : Argument non valide fourni pour foreach() dans [CHEMIN_THÈME]/functions.php à la ligne 118 »
De plus, lorsque je visite une page qui est censée afficher un sidebar, j'obtiens cette erreur :
« Indice non défini : _sidebar dans [CHEMIN_THÈME]/sidebar.php à la ligne 17 »
Je n'ai pas modifié votre code ci-dessus, et oui, je les place aux bons endroits. Toute aide est grandement appréciée !
Hmm hmm Chris, c'est étrange, n'auriez-vous pas un plugin qui pourrait causer des problèmes avec ce code ? ou un autre code dans le functions.php ? si vous avez toujours des problèmes, je vais le configurer en tant que plugin que vous pouvez télécharger pour voir si cela résout les choses.
Salut encore,
Je suis désolé, je travaillais sur mon localhost, j'ai essayé de le télécharger sur mon hébergement et cela a fonctionné sans aucun problème. Avez-vous une idée pourquoi cela ne fonctionne pas sur Wampserver.
Et où l'administrateur de wordpress peut-il ajouter une nouvelle barre latérale ? Uniquement à partir de ce tableau ou y a-t-il une option Ajouter une nouvelle barre latérale sur l'écran de prévisualisation ? Je n'ai pas vu une telle option d'ajout.
Merci encore pour vos excellents extraits.
Hakan
Salut Hakan, Je suis content d'apprendre que vous avez réussi à faire fonctionner les choses, bien qu'il soit très étrange que cela ne fonctionne pas localement, pour être honnête, je ne suis pas sûr pourquoi. Concernant la mise à jour, pour le moment, vous devez toujours mettre à jour le tableau. Bien que, en raison des commentaires que je reçois, je pourrais arranger les choses et le publier sous forme de plugin à l'avenir avec une interface d'administration.
Merci encore Hakan, content d'apprendre que vous aimez les extraits.
Salut Kevin,
Je suis désolé mais le résultat est le même. Aucun changement. Dans mon espace d'administration, je reçois :
‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>Sélectionnez le widget latéral à utiliser sur cette page.
sous la partie Sélection du widget latéral, à droite et sur le site de prévisualisation, j'obtiens :
ID); $link = $custom["_sidebar"][0]; if($link != ”){ echo ”; if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar($link) ) : endif; echo ”; } ?>
Excellente idée. J'ai dû créer des pages de modèles de barres latérales séparées, ou simplement des modèles séparés pour mon site web car j'avais tendance à utiliser beaucoup de barres latérales (barres latérales personnalisées pour chaque page que je créais en gros). Je pense que c'est génial à utiliser pour les tests A/B et le marketing avancé (des CTA spécifiques dans la barre latérale liés à des pages spécifiques). Merci ! 🙂
Salut Antonin
Je suis content d'apprendre que ça te plaît, j'ai posté il y a quelque temps sur la première moitié seulement pour créer la partie des barres latérales en utilisant le tableau. Puis, en travaillant sur un thème, j'ai eu besoin de les attacher et j'ai eu cette idée.
Salut Kevin,
Quand j'applique ton code, je vois
“‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>
Sélectionnez le widget latéral à utiliser sur cette page.”
sur la barre latérale de ma page dans "Sélection de la barre latérale"
Avez-vous une idée à ce sujet ?
Salut Hakan, vous voyez le code dans la page ?
Salut Hakan,
J'ai mis en ligne la première partie pour qu'elle fonctionne comme un plugin, ce qui pourrait vous faciliter la configuration.
http://wpsnipp.com/wp-content/uploads/2011/11/sidebars.php_.zip
Ouvrez le zip et téléchargez ce fichier dans votre dossier de plugins, puis ajoutez le deuxième code ci-dessus pour remplacer votre code de barre latérale. N'oubliez pas d'activer le plugin appelé attach sidebars. J'espère que cela vous aidera.
Avez-vous publié ceci pour Wordpress ? Si oui, envoyez-moi un lien sur Twitter (@antjanus), j'en écrirai un article (et je le recommanderai à tout le monde 🙂 ).
En tant que plugin, il est limité. Je pensais que la raison pour laquelle Hakan avait un problème était juste l'emplacement dans le fichier functions.php, alors je l'ai juste transformé en plugin pour résoudre son problème plus rapidement. Il doit avoir une sorte d'interface pour que les gens puissent ajouter de nouvelles barres latérales avant que je ne puisse le publier en tant que plugin, car le tableau n'est pas pratique.
Bonne remarque. Faites-moi savoir quand vous l'aurez terminé (ou si vous le faites finalement) 🙂