(ПРИМЕЧАНИЕ. Этот ответ для вопроса , который был задан изначально . Вопрос был изменен после публикации этого ответа, поэтому приведенный ниже ответ может показаться неправильным ответом на вопрос вэто текущее состояние.)
Пакет виджетов SiteOrigin поставляется с широким спектром виджетов.
Каждый виджет компилирует свой собственный CSS, используя LESS переменные.
Поскольку вы можете явно изменять цвет (цвета) для каждого виджета, эти переменные сохраняются в базе данных и извлекаются индивидуально для каждого отдельного виджета, а затем компилируются в специфичные для виджета файлы CSS.Это происходит при «сохранении» виджета, и CSS кэшируется на 7 дней.
Чтобы переопределить переменные для этих виджетов, у вас есть несколько различных фильтров на выбор (см. siteorigin-widget.class.php
файл плагина, метод get_instance_css
, начиная со строки 816, чтобы увидеть код, который делает это).К вашему сведению, вы захотите сделать это на этом уровне, поскольку это «базовый» класс для всех отдельных виджетов.
Фильтр 1:
$vars = apply_filters( 'siteorigin_widgets_less_variables_' . $this->id_base, $this->get_less_variables( $instance ), $instance, $this );
Это было бы идеальное место, потому что $vars
- это массив всех определенных цветов, и вы можете легко переопределить любой из них, который вам нравится. Однако , проблема в том, что этот фильтр будет трудно использовать, так как он запекает в id_base
виджета, что приводит к тегам фильтра, подобным siteorigin_widgets_less_variables_sow-accordion
- однако, вы могли бы теоретически настроитьдлинный список фильтров, по одному для каждого виджета, которые выполняются через одну и ту же функцию.
Фильтр 2:
Вскоре после этого есть фильтр, однако переменные LESS имеютуже «записано» в LESS:
$less = apply_filters( 'siteorigin_widgets_styles', $less, $this->widget_class, $instance );
Это фильтр, который нужно использовать, но вам нужно знать имена переменных LESS, которые вы хотите заменить.Этот список (по крайней мере, некоторые из них):
$vars = array (
'heading_background_color' => '',
'heading_background_hover_color' => '',
'title_color' => '',
'title_hover_color' => '',
'heading_border_color' => '',
'heading_border_hover_color' => '',
'heading_border_width' => '',
'has_heading_border_width' => '',
'panels_background_color' => '',
'panels_font_color' => '',
'panels_border_color' => '',
'panels_border_width' => '',
'has_panels_border_width' => '',
'panels_margin_bottom' => '',
}
Построение решения:
Вооружившись этой информацией, мы можем применять фильтры следующим образом:
function my_siteorigin_override_less( $less ) {
// you'll need to load your override colors here. that is outside the scope of this question / answer
$my_colors = array(
'heading_background_color' => '#fff',
'heading_background_hover_color' => '#ff0',
'title_color' => '#000'
// any other colors you want to include / override....
);
foreach( $my_colors as $name => $value ) {
// Ignore empty string, false and null values (but keep '0')
if( ! empty( $value ) ) {
$less = preg_replace('/\@'.preg_quote($name).' *\:.*?;/', '@'.$name.': '.$value.';', $less);
}
}
return $less;
}
add_filter( 'siteorigin_widgets_styles', 'my_siteorigin_override_less' );
Приведенный выше код протестирован и доказал свою работоспособность.
Примечания:
SiteOrigin "кэширует" CSS, который он создает в течение 7 дней.Это означает, что если у вас уже установлены виджеты и вы измените цвет по умолчанию, изменения не будут отражены, пока кэш не будет очищен каким-либо образом.
В коде SiteOrigin есть служебный метод, который вы можете использовать«очистить» кеш, когда вам нужно.Я бы порекомендовал вам сделать что-то вроде ниже в любое время цвета по умолчанию сохранены / обновлены:
if ( is_callable( 'SiteOrigin_Widget', 'clear_file_cache' ) ) {
// pass TRUE to force delete
SiteOrigin_Widget::clear_file_cache( TRUE );
}