janfabry
  • 0
Гуру

Ограничить виджет определенной боковой панелью?

  • 0

У меня есть несколько боковых панелей, но не все из них одинакового размера. Не все виджеты подходят ко всем боковым панелям (например, у меня есть «боковая панель нижнего колонтитула», где клиент может размещать пользовательские виджеты, но они широкие и совсем не помещаются в «настоящую» боковую панель). Я хочу указать, когда виджет помещается на боковую панель, где ему не место (например, изменить цвет текста заголовка). Как лучше всего это сделать?

Share
  1. Существует хук widget_display_callback, который вы можете использовать для переопределения виджета на основе боковой панели и виджета (возвращайте false, когда это неуместно):

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

    • 0
    • Но это только скрывает боковую панель, когда вы отображаете ее на лицевой стороне? Или это касается и админки?

      • 0
    • Он скрывает его только с лицевой стороны. Затем вы можете использовать его для условного повторения чего-то вроде «Извините, неправильная боковая панель. Пожалуйста, поместите этот виджет в другое место». а затем вернуть false в залог. В админке нет возможности сделать то же самое. Я пытался уговорить Эндрю добавить аналогичную функциональность для экрана виджетов, но он был непреклонен в том, что вместо этого я должен использовать CSS и JS для управления DOM. (Мне понадобился этот материал для моего плагина контекстов виджетов, который не имеет значения в некоторых боковых панелях.)

      • 0
    • Я делаю это, и у меня есть области виджетов, называемые «нижний колонтитул» и «боковая панель», которые я использую в определенном месте в шаблонах. Но нижний колонтитул намного шире боковой панели, поэтому виджеты, созданные для нижнего колонтитула, не помещаются на боковой панели. Вот почему я хотел бы указать, когда вы перетаскиваете «широкий» виджет в «маленькую» область виджета. Или я что-то упустил в вашем ответе?

      • 0
    • Нет, ничего не пропустил. Мое следующее предложение, хотя это и потребует немного больше работы, — создать свои собственные виджеты для использования в вашем конкретном месте. Все предопределенные будут в основных файлах. Таким образом, вы можете контролировать их ширину и еще много чего.

      • 0
  2. Я решил это с помощью некоторого CSS, похожего на мой трюк, чтобы выделить мои собственные виджеты. Области перетаскивания боковой панели относятся div к классу widgets-sortable и соответствуют id вашей боковой панели. Ваши виджеты относятся div к классу widget и id форме widget-[global_counter]_[widget_key]-[widget_id] . Вы можете комбинировать их, чтобы выделить правильные или неправильные комбинации.

    Например, у меня есть боковая панель footer, которая должна содержать только широкие виджеты. Эти виджеты узнаваемы, потому что их идентификатор включает в себя -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;
    }
    
    • 0
  3. Я бы, вероятно, определил свои собственные области виджетов, которые получают все виджеты, помещенные в нее в области администратора, и помещал бы эту область виджетов только в определенное место в теме.

    • 0

Оставить ответ

You must login to add an answer.