Limit widget to certain sidebar?

I have multiple “sidebars”, but not all of them are the same size. Not all widgets fit in all sidebars (for example, I have a “footer sidebar” where the client can place custom widgets, but they are wide, and don’t fit at all in the “real” sidebar). I want to give an indication when a widget is placed in a sidebar where it would not belong (change the header text color, for example). What would be the best way to do this?

Related posts

Leave a Reply

3 comments

  1. I solved it using some CSS, similar to my trick to highlight my own widgets. The sidebar drop areas are div‘s with the class widgets-sortable and they have the id of your sidebar. Your widgets are div‘s with class widget, and and id of the form widget-[global_counter]_[widget_key]-[widget_id]. You can combine these to highlight correct or wrong combinations.

    For example, I have a sidebar called footer that should only contain wide widgets. These widgets are recognizable because their ID includes -wide-. I want these in green, and all other ones in red with a strike through.

    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;
    }
    
  2. I’d probably define my own widget areas that get whatever widgets are put into it in the admin area, and only put that widget area in a specific location in the theme.