web-dev-qa-db-ja.com

特定のウィジェットのみにカスタムCSSを追加する方法

私はregister_sidebardynamic_sidebarを使った標準の動的サイドバーを持っていて、それをラップする'last_widget'に別のクラス(<li>)を追加するためにサイドバーの最後のウィジェット(セット数のウィジェットはありません)が必要です。これを行うための最良の方法は何ですか?

6
John P Bloch

こんにちはジョン

私はこれがあなたが探しているものであると思います(私はそれが自明であると思うなら私はコードを説明します;そうでなければ私に知らせてください):

<?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;
}
6
MikeSchinkel

CSSを使用して:last-childを使用して最後のウィジェットを選択することもできます(ただし、IEはこれは望ましくありません)。またはjQueryを使用して選択することもできます。しかし、上記のPHPコードはおそらくそれを行うためのより良い方法です。

0
Shaun

私はコアコードのためにこれを行うパッチを書きました、関連チケットは #12615です - サイドバーの各ウィジェットに "first"と "last"のCSSクラス名を追加します(フロントエンド)

パッチ は実用的な解決策です。サイドバー配列でend()を使用するようにするいくつかのウィジェットの内部構造があります。 (ええ、それはあまりにも単純すぎたでしょう、正しい:P)。

パッチがクリーンに適用されなくなったかどうかを教えてください。私はこれを2.9.2のサイトで非常にうまく動かしています。

0
hakre