对我结束所做的事情进行了高层次的描述,实际上实现这样一个实现并节省您为小部件和定制器表单编写不同代码的工作量并不太糟糕,但还有许多小细节需要处理。
将设置存储为帖子的元值创建适当的自定义程序节将节与仅在自定义程序上下文中使用的“虚拟”选项相关联。这些选项将所有短代码的设置存储为一个数组当输入customizer时,从元值中输入选项。当customizer保存时,更新更改的元值并删除选项以生成“表单”,使用小部件表单并执行一些regexp以添加data-customize-setting-link
将与相关设置关联的属性
ob_start();
$widget->form(array());
$form = ob_get_clean();
$form = preg_replace_callback(\'/<(input|select)\\s+.*name=("|\\\').*\\[\\d*\\]\\[([^\\]]*)\\][^>]*>/\',
function ($matches) use ($p, $wp_customize, $meta) {
$setting = \'_virtual-\'.WIDGET_BASE_ID.\'[\'.$p->ID.\'][\'.$matches[3].\']\';
$wp_customize->add_setting( $setting, array(
\'default\' => $meta[$matches[3]], // set default to current value
\'type\' => \'option\'
) );
return str_replace(\'<\'.$matches[1],\'<\'.$matches[1].\' data-customize-setting-link="\'.$setting.\'"\',$matches[0]);
},
$form
);
对于实际呈现代码,请检查页面是否正在自定义,如果是,请使用该选项,否则请使用meta