Customize: Fix inability to delete nav menus by preventing preview filters from being added during customize_save admin ajax request.

Also prevent setting `nav_menu_locations[...]` values to `NaN` which gets sent as `null`.

Props westonruter.
See #30937, [38810].
Merges [39558] to the 4.7 branch.
Fixes #39103.



git-svn-id: https://develop.svn.wordpress.org/branches/4.7@39570 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Dion Hulse 2016-12-12 01:56:53 +00:00
parent 1a84a32ffd
commit ce5e63c224
2 changed files with 12 additions and 9 deletions

View File

@ -1169,7 +1169,11 @@
// @todo It would be better if this was added directly on the setting itself, as opposed to the control. // @todo It would be better if this was added directly on the setting itself, as opposed to the control.
control.setting.validate = function( value ) { control.setting.validate = function( value ) {
return parseInt( value, 10 ); if ( '' === value ) {
return 0;
} else {
return parseInt( value, 10 );
}
}; };
// Edit menu button. // Edit menu button.

View File

@ -531,10 +531,7 @@ final class WP_Customize_Nav_Menus {
*/ */
public function customize_register() { public function customize_register() {
/* // Preview settings for nav menus early so that the sections and controls will be added properly.
* Preview settings for nav menus early so that the sections and controls will be added properly.
* See https://github.com/xwp/wp-customize-snapshots/blob/962586659688a5b1fd9ae93618b7ce2d4e7a421c/php/class-customize-snapshot-manager.php#L506-L543
*/
$nav_menus_setting_ids = array(); $nav_menus_setting_ids = array();
foreach ( array_keys( $this->manager->unsanitized_post_values() ) as $setting_id ) { foreach ( array_keys( $this->manager->unsanitized_post_values() ) as $setting_id ) {
if ( preg_match( '/^(nav_menu_locations|nav_menu|nav_menu_item)\[/', $setting_id ) ) { if ( preg_match( '/^(nav_menu_locations|nav_menu|nav_menu_item)\[/', $setting_id ) ) {
@ -542,10 +539,12 @@ final class WP_Customize_Nav_Menus {
} }
} }
$this->manager->add_dynamic_settings( $nav_menus_setting_ids ); $this->manager->add_dynamic_settings( $nav_menus_setting_ids );
foreach ( $nav_menus_setting_ids as $setting_id ) { if ( ! $this->manager->doing_ajax( 'customize_save' ) ) {
$setting = $this->manager->get_setting( $setting_id ); foreach ( $nav_menus_setting_ids as $setting_id ) {
if ( $setting ) { $setting = $this->manager->get_setting( $setting_id );
$setting->preview(); if ( $setting ) {
$setting->preview();
}
} }
} }