web-dev-qa-db-ja.com

デフォルトのサイドバークラスから特定のウィジェットを除外する

私は、各ウィジェットを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の内側から変更します。主な問題は、私がどの関数や変数をフィルターでターゲットにするべきかわからないということです。コーデックスはあまり使用されていないグローバル変数を分類するのに良い仕事をしていないし、それが役立つはずのようなものはフィルタリファレンスには見当たりません。

1
Iterate

私は自分自身の答えをフィルタと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リスト項目タグをそれらの唯一のクラスとして使うように変更します。 「

私はこのコードが同じ質問を見つめている少数の人々に役立つことを願っています。

2
Iterate

実際にはjQueryを使って試すことができます。

jQuery('.xoxo').parent().removeClass('box');
0
Joshua Abenazer