私は、各ウィジェットをregister_sidebars
のクラスを持つリスト項目として表示する.box
関数を使用する2つのサイドバーを持っています。
<?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>',
));
}
?>
そのため、出力は次のようになります。
<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>
必要なのは、サイドバー内のリンクウィジェット(または.xoxo
のクラスを持つもの)が.box
のクラスを取得しないようにするための条件関数です。特定のスタイルを.box
の内側から変更します。主な問題は、私がどの関数や変数をフィルターでターゲットにするべきかわからないということです。コーデックスはあまり使用されていないグローバル変数を分類するのに良い仕事をしていないし、それが役立つはずのようなものはフィルタリファレンスには見当たりません。
私は自分自身の答えをフィルタと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;
}
?>
最初の行は実際にあなたがウィジェットの前後に置くためにregister_sidebar()
またはregister_sidebars()
をプログラムしたものを上書きします。そのため、このコードを使用している場合は、register_sidebar()
の中を安全に空白のままにすることができます。関数の最初の行は、ウィジェットの名前(したがって型)をリストアイテムのクラスにし、デフォルトのクラス.box
をすべてのウィジェットに与えます。 if
ステートメントは基本的に、「もしウィジェットのどれかがクラス.Links
を持っていれば(それらがブログロールまたはリンクリストであれば)、それらのウィジェットの前後のXHTMLリスト項目タグをそれらの唯一のクラスとして使うように変更します。 「
私はこのコードが同じ質問を見つめている少数の人々に役立つことを願っています。
実際にはjQueryを使って試すことができます。
jQuery('.xoxo').parent().removeClass('box');