WordPress.org

Make WordPress Core

Ticket #39103: 39103.1.dff

File 39103.1.dff, 4.0 KB (added by westonruter, 4 years ago)
Line 
1diff --git src/wp-admin/js/customize-nav-menus.js src/wp-admin/js/customize-nav-menus.js
2index b7556f6..a37d2c4 100644
3--- src/wp-admin/js/customize-nav-menus.js
4+++ src/wp-admin/js/customize-nav-menus.js
5@@ -1169,7 +1169,11 @@
6 
7                        // @todo It would be better if this was added directly on the setting itself, as opposed to the control.
8                        control.setting.validate = function( value ) {
9-                               return parseInt( value, 10 );
10+                               if ( '' === value ) {
11+                                       return 0;
12+                               } else {
13+                                       return parseInt( value, 10 );
14+                               }
15                        };
16 
17                        // Edit menu button.
18diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
19index 127d572..2bb291f 100644
20--- src/wp-includes/class-wp-customize-manager.php
21+++ src/wp-includes/class-wp-customize-manager.php
22@@ -227,6 +227,13 @@ final class WP_Customize_Manager {
23        private $_changeset_data;
24 
25        /**
26+        * Whether the instance will only be used for saving, and not previewing.
27+        *
28+        * @var
29+        */
30+       public $saving = false;
31+
32+       /**
33         * Constructor.
34         *
35         * @since 3.4.0
36@@ -243,7 +250,7 @@ final class WP_Customize_Manager {
37        public function __construct( $args = array() ) {
38 
39                $args = array_merge(
40-                       array_fill_keys( array( 'changeset_uuid', 'theme', 'messenger_channel' ), null ),
41+                       array_fill_keys( array( 'changeset_uuid', 'theme', 'messenger_channel', 'saving' ), null ),
42                        $args
43                );
44 
45@@ -268,6 +275,7 @@ final class WP_Customize_Manager {
46                $this->theme = wp_get_theme( $args['theme'] );
47                $this->messenger_channel = $args['messenger_channel'];
48                $this->_changeset_uuid = $args['changeset_uuid'];
49+               $this->saving = ! empty( $args['saving'] ) || $this->doing_ajax( 'customize_save' );
50 
51                require_once( ABSPATH . WPINC . '/class-wp-customize-setting.php' );
52                require_once( ABSPATH . WPINC . '/class-wp-customize-panel.php' );
53@@ -741,7 +749,7 @@ final class WP_Customize_Manager {
54                 * may short-circuit because it will detect that there are no changes to
55                 * make.
56                 */
57-               if ( ! $this->doing_ajax( 'customize_save' ) ) {
58+               if ( ! $this->saving ) {
59                        foreach ( $this->settings as $setting ) {
60                                $setting->preview();
61                        }
62diff --git src/wp-includes/class-wp-customize-nav-menus.php src/wp-includes/class-wp-customize-nav-menus.php
63index ca1b72f..1bffeb0 100644
64--- src/wp-includes/class-wp-customize-nav-menus.php
65+++ src/wp-includes/class-wp-customize-nav-menus.php
66@@ -542,10 +542,12 @@ final class WP_Customize_Nav_Menus {
67                        }
68                }
69                $this->manager->add_dynamic_settings( $nav_menus_setting_ids );
70-               foreach ( $nav_menus_setting_ids as $setting_id ) {
71-                       $setting = $this->manager->get_setting( $setting_id );
72-                       if ( $setting ) {
73-                               $setting->preview();
74+               if ( ! $this->manager->saving ) {
75+                       foreach ( $nav_menus_setting_ids as $setting_id ) {
76+                               $setting = $this->manager->get_setting( $setting_id );
77+                               if ( $setting ) {
78+                                       $setting->preview();
79+                               }
80                        }
81                }
82 
83diff --git src/wp-includes/class-wp-customize-widgets.php src/wp-includes/class-wp-customize-widgets.php
84index 7403119..7fa38e6 100644
85--- src/wp-includes/class-wp-customize-widgets.php
86+++ src/wp-includes/class-wp-customize-widgets.php
87@@ -209,10 +209,10 @@ final class WP_Customize_Widgets {
88 
89                /*
90                 * Preview settings right away so that widgets and sidebars will get registered properly.
91-                * But don't do this if a customize_save because this will cause WP to think there is nothing
92-                * changed that needs to be saved.
93+                * But don't do this when saving the changeset because this will cause WP to think there
94+                * is nothing changed that needs to be saved.
95                 */
96-               if ( ! $this->manager->doing_ajax( 'customize_save' ) ) {
97+               if ( ! $this->manager->saving ) {
98                        foreach ( $settings as $setting ) {
99                                $setting->preview();
100                        }
101@@ -509,7 +509,7 @@ final class WP_Customize_Widgets {
102                        }
103                }
104 
105-               if ( ! $this->manager->doing_ajax( 'customize_save' ) ) {
106+               if ( ! $this->manager->saving ) {
107                        foreach ( $new_setting_ids as $new_setting_id ) {
108                                $this->manager->get_setting( $new_setting_id )->preview();
109                        }