私はregister_sidebar
とdynamic_sidebar
を使った標準の動的サイドバーを持っていて、それをラップする'last_widget'
に別のクラス(<li>
)を追加するためにサイドバーの最後のウィジェット(セット数のウィジェットはありません)が必要です。これを行うための最良の方法は何ですか?
こんにちはジョン:
私はこれがあなたが探しているものであると思います(私はそれが自明であると思うなら私はコードを説明します;そうでなければ私に知らせてください):
<?php
add_filter('dynamic_sidebar_params','my_dynamic_sidebar_params');
function my_dynamic_sidebar_params($params) {
$sidebar_id = $params[0]['id'];
$sidebar_widgets = wp_get_sidebars_widgets();
$last_widget_id = end($sidebar_widgets[$sidebar_id]);
if ($last_widget_id==$params[0]['widget_id'])
$params[0]['before_widget'] = str_replace(' class="',' class="last_widget ',$params[0]['before_widget']);
return $params;
}
CSSを使用して:last-childを使用して最後のウィジェットを選択することもできます(ただし、IEはこれは望ましくありません)。またはjQueryを使用して選択することもできます。しかし、上記のPHPコードはおそらくそれを行うためのより良い方法です。
私はコアコードのためにこれを行うパッチを書きました、関連チケットは #12615です - サイドバーの各ウィジェットに "first"と "last"のCSSクラス名を追加します(フロントエンド)
パッチ は実用的な解決策です。サイドバー配列でend()を使用するようにするいくつかのウィジェットの内部構造があります。 (ええ、それはあまりにも単純すぎたでしょう、正しい:P)。
パッチがクリーンに適用されなくなったかどうかを教えてください。私はこれを2.9.2のサイトで非常にうまく動かしています。