是的,您可以更改transport
在页面加载后动态创建已注册设置的。实际上active_callback
可以与JS结合使用来更改transport
而不是导致控件隐藏。
假设您已注册ID为的控件excerpt_length
, 您已注册设置和控件,如下所示:
$wp_customize->add_setting( \'excerpt_length\', array(
\'transport\' => \'refresh\',
\'sanitize_callback\' => function( $value ) {
return intval( $value );
},
) );
$wp_customize->add_control( \'excerpt_length\', array(
\'label\' => __( \'Excerpt length\', \'example\' ),
\'section\' => \'something\',
\'type\' => \'number\',
\'active_callback\' => function() {
// Admin check is for initial state in customize.php.
return is_admin() || is_archive() || ( is_home() && ! is_front_page() );
},
) );
然后,您可以为Customizer controls应用程序(位于
customize_controls_enqueue_scripts
) 当
active
状态更改,如切换设置的
transport
什么时候
active
状态更改,而不是切换控件的可见性:
wp.customize.control( \'excerpt_length\', function( control ) {
control.onChangeActive = function( active ) {
control.setting.transport = active ? \'refresh\' : \'postMessage\';
};
} );
有其他方法可以做到这一点,但这可能是最少的代码量。