J'ai deux barres latérales utilisant la fonction register_sidebars
qui affichent chaque widget sous forme d'élément de liste avec une classe de .box
:
<?php if(function_exists('register_sidebars')){
register_sidebars(2, array(
'name'=>'sidebar%d',
'id' =>'sidebar',
'before_widget'=>'<li class="box">',
'after_widget'=>'</li><!--box--><!--aside-->',
'before_title'=>'<h2>',
'after_title'=>'</h2>',
));
}
?>
Donc, la sortie va quelque chose comme:
<div class="side">
<ul>
<li class="box">
<div class="textwidget">Lorem ipsum</div>
</li><!--box--><!--aside-->
<li class="box">
<h2>Blogroll</h2>
<ul class="xoxo blogroll">
<li><a href="http://example.com">Example</a></li>
</ul>
</li><!--box--><!--aside-->
</ul>
</div>
Ce qu’il me faut, c’est une fonction conditionnelle pour que les widgets Liens (ou ceux ayant une classe de .xoxo
) dans les barres latérales n’obtiennent pas une classe de .box
parce que je veux les styler différemment, et uniquement ceux-ci, et de manière simple. changer certains styles de l'intérieur de .box
. Le problème principal est que je ne sais pas quelle fonction ou quelles variables cibler avec un filtre. Le codex ne fait pas un bon travail de classification des variables globales moins utilisées et je ne vois rien dans la référence de filtre qui puisse sembler utile.
J'ai codé ma propre réponse ensemble à l'aide d'un filtre et de dynamic_sidebar_params
:
<?php
add_filter('dynamic_sidebar_params','io_blogroll_class');
function io_blogroll_class($params){
$params[0]['before_widget'] = '<li class="'.$params[0]['widget_name'].' box">';
$params[0]['after_widget'] = '</li><!--'.$params[0]['widget_name'].'-->';
if ($params[0]['widget_name'] == "Links"){
$params[0]['before_widget'] = '<li class="'.$params[0]['widget_name'].'">';
$params[0]['after_widget'] = '</li><!--'.$params[0]['widget_name'].'-->';
}
return $params;
}
?>
Les premières lignes remplacent en fait ce que vous avez programmé avec register_sidebar()
ou register_sidebars()
à mettre avant et après un widget. Vous pouvez donc laisser ce champ vide dans register_sidebar()
si vous utilisez ce code. Les premières lignes de la fonction font du nom du widget (donc du type) une classe de l'élément de liste et attribuent une classe par défaut de .box
à tous les widgets. L’instruction if
indique essentiellement: "Si l’un des widgets a la classe .Links
(qu’il s’agit d’une blogroll ou d’une liste de liens) changez les balises d’élément de liste XHTML avant et après ces widgets pour utiliser leur nom de widget comme seule classe. "
J'espère que ce code aide quelques personnes à poser la même question.
Vous pouvez réellement essayer cela en utilisant jQuery.
jQuery('.xoxo').parent().removeClass('box');