【发布时间】:2018-11-01 18:52:37
【问题描述】:
我想为现有字段类型 color 创建一个自定义字段,这是 Siteorigin 小部件包中的默认值。基本上,我需要为 color 字段类型创建自己的 UI 和后端逻辑。
由于这个字段用在很多地方,如果我可以直接覆盖字段类型,它将自动在每个地方工作。
我搜索了很多次,还挖掘了小部件捆绑包和 SO 本身的源代码,但找不到我需要的东西,即使我尝试以 0 优先级(最高)加载我的字段文件夹但没有不工作。它仍然显示默认的颜色字段类型。
谁能给我指出一些操作或过滤器,以便我可以取消注册并使用相同类型的color 重新注册?或者是否有其他可能的解决方法?
更新
我的问题焦点是 Siteorigin Widgets Bundle Plugin。
我不想只覆盖任何样式变量,而是想覆盖现有字段。经过一番研究,我发现了 2 个可用于覆盖现有字段的过滤器:
// Give other plugins a way to modify this form.
$form_options = apply_filters( 'siteorigin_widgets_form_options', $form_options, $this );
$form_options = apply_filters( 'siteorigin_widgets_form_options_' . $this->id_base, $form_options, $this );
这两个过滤器在类SiteOrigin_Widget中的方法form_options()中被调用,但是这个方法是这样调用的:
public function form( $instance, $form_type = 'widget' ) {
if( $form_type == 'widget' ) {
if( empty( $this->form_options ) ) {
$this->form_options = $this->form_options();
}
$form_options = $this->form_options;
}
...
...
}
但看起来$this->form_options 永远不会为空,因此,方法$this->form_options() 永远不会被调用,这反过来又不会应用过滤器siteorigin_widgets_form_options 和siteorigin_widgets_form_options_<id_base>
因此,通过这种方法,我修改表单字段的机会变为zero。
我基本上需要的是例如。有一个现有字段color,我还有另一个自定义字段adv-color。现在,挑战是将color 字段的所有实例覆盖为adv-color,因此该字段的每个实例都被覆盖。但是,这仍然是一个希望。
如果我的方法有误,或者有其他方法可以解决这个问题,请告诉我。示例非常值得期待。
【问题讨论】:
-
SiteOrigin 是一家公司,因此很难确定您具体指的是哪个插件/小部件。你能提供一个特定插件的链接吗?并且 - 如果它是“Widgets Bundle”(您所说的),那么您要问的具体是哪个小部件?
-
@cale_b 对不起,我的意思是 Siteorigin Widgets Bundle Plugin。
-
为什么要覆盖现有的字段?我对这个问题的第一个版本的解决方案覆盖了color generated。覆盖小部件控件中的颜色字段与覆盖小部件渲染时输出的颜色 value 有什么区别?
标签: wordpress siteorigin