web-dev-qa-db-ja.com

ウィジェットを特定のサイドバーに制限しますか?

私は複数の「サイドバー」を持っていますが、それらすべてが同じサイズであるとは限りません。すべてのウィジェットがすべてのサイドバーに収まるとは限りません(たとえば、クライアントがカスタムウィジェットを配置できる「フッターサイドバー」がありますが、幅が広く、「本物の」サイドバーに収まりません)。ウィジェットが属していないサイドバーにウィジェットが配置されたときに表示したい(たとえば、ヘッダーのテキストの色を変更する)。これを行うための最良の方法は何でしょうか。

7
Jan Fabry

私は への私のトリックと同じようなCSSを使ってそれを解決しました 私自身のウィジェットをハイライトします - /。サイドバーのドロップ領域はクラスwidgets-sortableを持つdivであり、サイドバーのidを持ちます。あなたのウィジェットは、クラスdivを持つwidget、そしてフォームwidget-[global_counter]_[widget_key]-[widget_id]idです。これらを組み合わせて正しいまたは間違った組み合わせを強調表示することができます。

たとえば、幅の広いウィジェットのみを含めることができるfooterというサイドバーがあります。これらのウィジェットは、IDに-wide-が含まれているため認識できます。私はこれらを緑色にし、他のものはすべてストライキを入れて赤色にします。

add_action('admin_print_styles-widgets.php', 'print_widget_hint_style');
function print_widget_hint_style()
{
    echo <<<EOF
<style type="text/css">
/* Less specific rule for all widgets */
div.widgets-sortables[id*=-footer] div.widget .widget-title
{
    color: red;
    text-decoration: line-through;
}

/* More specific rule for correct widgets */
div.widgets-sortables[id*=-footer] div.widget[id*=-wide-] .widget-title
{
    color: green;
}
</style>
EOF;
}
3
Jan Fabry

Widget_display_callbackフックがあります。これを使用すると、サイドバーとウィジェットに基づいてウィジェットをオーバーライドできます(不適切な場合はfalseを返します)。

http://core.trac.wordpress.org/browser/trunk/wp-includes/widgets.php?rev=15590#L180

4

私はおそらく自分自身のウィジェット領域を定義してそれを管理領域に入れるウィジェットを作り、そのウィジェット領域をテーマ内の特定の場所に置くようにします。

0
tw2113