如何动态添加定制器控件?

时间:2018-02-28 作者:Jonathan Guerin

我有很多定制控件,这是我用来为标题创建文本字段的s:

$wp_customize->add_section( \'ju_header_settings\', array(
                                                            \'title\'     => __(\'Header Settings\', \'_s\'),
                                                            \'priority\'  => 31
) );

$wp_customize->add_setting( \'header_custom_text_top\', array(
                                                            \'default\'   => \'talking about\',
                                                            \'transport\' => \'refresh\'
) );

$wp_customize->add_control( 
    new WP_Customize_Control( $wp_customize,
                                    \'header_text_1\', 
                                    array(
                                        \'label\'     => __( \'Header Text #1\', \'_s\'),
                                        \'section\'   => \'ju_header_settings\',
                                        \'settings\'  => \'header_custom_text_top\',
                                        \'type\'      => \'text\',
                                    )
) );
现在碰巧now I have multiple headers. Each with a different layout and component added to it.

这意味着用户可以从另一个控件中选择要使用的标题:

$wp_customize->add_setting( \'header_style\', array(
                                                \'default\'   => \'style-1\',
                                                \'transport\' => \'refresh\'
) );

$wp_customize->add_control( 
    new WP_Customize_Control( $wp_customize,
                                    \'header_selector\', 
                                    array(
                                        \'label\'     => __( \'Select the Header You Want\', \'_s\'),
                                        \'section\'   => \'ju_header_settings\',
                                        \'settings\'  => \'header_style\',
                                        \'type\'      => \'radio\',
                                        \'choices\'   => array(
                                                        \'style-1\'   => \'Style One Header\',
                                                        \'style-2\'   => \'Style Two Header\',
                                        )
                                    )
) );
我的“选择标题”设置是用户应该在看到其他内容之前首先看到的内容。然后,一旦他们选择了主样式,基于他们选择的标题,一组特定的控件(绑定到特定的标题,并且仅限于此)应该动态显示。请记住,这应该发生在同一个Customizer部分中。

以下是我试图实现的目标的模式:

Schema

我甚至无法开始这方面的工作,因为网络上没有可以为我指明正确方向的资源。我可以做的是为每个控件插入一个自定义类,并使用JS隐藏我不需要的某些控件,但这感觉非常混乱。尤其要记住垃圾收集,其中需要说明某些事情:

如果用户想要另一种新样式怎么办?我是否缓存他们现在不再使用的样式的设置以供将来使用?

控件本身,我是将它们全部加载到一起,还是在用户从下拉列表中选择时动态加载它们?

我该如何处理这个问题?

1 个回复
SO网友:Ionut Staicu

我并没有真正使用Customizer,但您需要的是“条件显示”(至少这是ACF&;co中使用的术语)。

尽管如此,我发现这篇文章可以帮助您:

https://florianbrinkmann.com/en/3783/conditional-displaying-and-hiding-of-customizer-controls-via-javascript/

此外,本SE主题:

Is it possible to conditionally displaying and hiding of customizer controls for each device preview?

结束

相关推荐