diff --git src/wp-admin/customize.php src/wp-admin/customize.php
index d6cec32..a858c25 100644
|
|
do_action( 'customize_controls_print_scripts' ); |
252 | 252 | $settings['settings'][ $id ] = array( |
253 | 253 | 'value' => $setting->js_value(), |
254 | 254 | 'transport' => $setting->transport, |
| 255 | 'dirty' => $setting->dirty, |
255 | 256 | ); |
256 | 257 | } |
257 | 258 | |
diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
index d95287c..ccce08e 100644
|
|
|
17 | 17 | |
18 | 18 | this.id = id; |
19 | 19 | this.transport = this.transport || 'refresh'; |
| 20 | this._dirty = options.dirty || false; |
20 | 21 | |
21 | 22 | this.bind( this.preview ); |
22 | 23 | }, |
… |
… |
|
2424 | 2425 | $.each( api.settings.settings, function( id, data ) { |
2425 | 2426 | api.create( id, id, data.value, { |
2426 | 2427 | transport: data.transport, |
2427 | | previewer: api.previewer |
| 2428 | previewer: api.previewer, |
| 2429 | dirty: !! data.dirty |
2428 | 2430 | } ); |
2429 | 2431 | }); |
2430 | 2432 | |
diff --git src/wp-includes/class-wp-customize-setting.php src/wp-includes/class-wp-customize-setting.php
index 5618314..18598dc 100644
|
|
class WP_Customize_Setting { |
60 | 60 | public $sanitize_callback = ''; |
61 | 61 | public $sanitize_js_callback = ''; |
62 | 62 | |
| 63 | /** |
| 64 | * Whether or not the setting is initially dirty when created. |
| 65 | * |
| 66 | * This is used to ensure that a setting will be sent from the pane to the |
| 67 | * preview when loading the Customizer. Normally a setting only is synced to |
| 68 | * the preview if it has been changed. This allows the setting to be sent |
| 69 | * from the start. |
| 70 | * |
| 71 | * @since 4.1.2 |
| 72 | * @access public |
| 73 | * @var bool |
| 74 | */ |
| 75 | public $dirty = false; |
| 76 | |
63 | 77 | protected $id_data = array(); |
64 | 78 | |
65 | 79 | /** |
diff --git src/wp-includes/class-wp-customize-widgets.php src/wp-includes/class-wp-customize-widgets.php
index 674dee6..79193f9 100644
|
|
final class WP_Customize_Widgets { |
216 | 216 | $sidebars_widgets = $this->old_sidebars_widgets; |
217 | 217 | $sidebars_widgets = retrieve_widgets( 'customize' ); |
218 | 218 | add_filter( 'option_sidebars_widgets', array( $this, 'filter_option_sidebars_widgets_for_theme_switch' ), 1 ); |
| 219 | unset( $GLOBALS['_wp_sidebars_widgets'] ); // reset global cache var used by wp_get_sidebars_widgets() |
219 | 220 | } |
220 | 221 | |
221 | 222 | /** |
… |
… |
final class WP_Customize_Widgets { |
232 | 233 | * @access public |
233 | 234 | * |
234 | 235 | * @param array $old_sidebars_widgets |
| 236 | * @return array |
235 | 237 | */ |
236 | 238 | public function filter_customize_value_old_sidebars_widgets_data( $old_sidebars_widgets ) { |
237 | 239 | return $this->old_sidebars_widgets; |
… |
… |
final class WP_Customize_Widgets { |
249 | 251 | * @access public |
250 | 252 | * |
251 | 253 | * @param array $sidebars_widgets |
| 254 | * @return array |
252 | 255 | */ |
253 | 256 | public function filter_option_sidebars_widgets_for_theme_switch( $sidebars_widgets ) { |
254 | 257 | $sidebars_widgets = $GLOBALS['sidebars_widgets']; |
… |
… |
final class WP_Customize_Widgets { |
332 | 335 | $setting_id = 'old_sidebars_widgets_data'; |
333 | 336 | $setting_args = $this->get_setting_args( $setting_id, array( |
334 | 337 | 'type' => 'global_variable', |
| 338 | 'dirty' => true, |
335 | 339 | ) ); |
336 | 340 | $this->manager->add_setting( $setting_id, $setting_args ); |
337 | 341 | } |
… |
… |
final class WP_Customize_Widgets { |
356 | 360 | $setting_id = sprintf( 'sidebars_widgets[%s]', $sidebar_id ); |
357 | 361 | $setting_args = $this->get_setting_args( $setting_id ); |
358 | 362 | if ( ! $this->manager->get_setting( $setting_id ) ) { |
| 363 | if ( ! $this->manager->is_theme_active() ) { |
| 364 | $setting_args['dirty'] = true; |
| 365 | } |
359 | 366 | $this->manager->add_setting( $setting_id, $setting_args ); |
360 | 367 | } |
361 | 368 | $new_setting_ids[] = $setting_id; |
… |
… |
final class WP_Customize_Widgets { |
894 | 901 | * @access public |
895 | 902 | * |
896 | 903 | * @param array $sidebars_widgets List of widgets for the current sidebar. |
| 904 | * @return array |
897 | 905 | */ |
898 | 906 | public function preview_sidebars_widgets( $sidebars_widgets ) { |
899 | 907 | $sidebars_widgets = get_option( 'sidebars_widgets' ); |
diff --git tests/phpunit/tests/customize/setting.php tests/phpunit/tests/customize/setting.php
index a783287..bf91a7d 100644
|
|
class Tests_WP_Customize_Setting extends WP_UnitTestCase { |
44 | 44 | $this->assertEquals( '', $setting->sanitize_js_callback ); |
45 | 45 | $this->assertFalse( has_filter( "customize_sanitize_{$setting->id}" ) ); |
46 | 46 | $this->assertFalse( has_filter( "customize_sanitize_js_{$setting->id}" ) ); |
| 47 | $this->assertEquals( false, $setting->dirty ); |
47 | 48 | } |
48 | 49 | |
49 | 50 | function test_constructor_with_args() { |