Customize: Allow previewed menus to be customized
Fixes a bug where menu assignements couldn't be changed when previewing a theme. Also removes an unnecessary call to menu mapping after a theme switch from the customizer and makes sure the locations option is always written, for good measure. Props westonruter. See #39692. Built from https://develop.svn.wordpress.org/trunk@41995 git-svn-id: http://core.svn.wordpress.org/trunk@41829 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
7e689f541d
commit
5aa45cd12e
|
@ -529,10 +529,11 @@ final class WP_Customize_Nav_Menus {
|
|||
* @since 4.3.0
|
||||
*/
|
||||
public function customize_register() {
|
||||
$changeset = $this->manager->unsanitized_post_values();
|
||||
|
||||
// Preview settings for nav menus early so that the sections and controls will be added properly.
|
||||
$nav_menus_setting_ids = array();
|
||||
foreach ( array_keys( $this->manager->unsanitized_post_values() ) as $setting_id ) {
|
||||
foreach ( array_keys( $changeset ) as $setting_id ) {
|
||||
if ( preg_match( '/^(nav_menu_locations|nav_menu|nav_menu_item)\[/', $setting_id ) ) {
|
||||
$nav_menus_setting_ids[] = $setting_id;
|
||||
}
|
||||
|
@ -627,7 +628,7 @@ final class WP_Customize_Nav_Menus {
|
|||
}
|
||||
|
||||
// Override the assigned nav menu location if mapped during previewed theme switch.
|
||||
if ( isset( $mapped_nav_menu_locations[ $location ] ) ) {
|
||||
if ( empty( $changeset[ $setting_id ] ) && isset( $mapped_nav_menu_locations[ $location ] ) ) {
|
||||
$this->manager->set_post_value( $setting_id, $mapped_nav_menu_locations[ $location ] );
|
||||
}
|
||||
|
||||
|
|
|
@ -694,7 +694,7 @@ function switch_theme( $stylesheet ) {
|
|||
}
|
||||
|
||||
$nav_menu_locations = get_theme_mod( 'nav_menu_locations' );
|
||||
add_option( 'theme_switch_menu_locations', $nav_menu_locations );
|
||||
update_option( 'theme_switch_menu_locations', $nav_menu_locations );
|
||||
|
||||
if ( func_num_args() > 1 ) {
|
||||
$stylesheet = func_get_arg( 1 );
|
||||
|
@ -2724,8 +2724,9 @@ function check_theme_switched() {
|
|||
if ( $stylesheet = get_option( 'theme_switched' ) ) {
|
||||
$old_theme = wp_get_theme( $stylesheet );
|
||||
|
||||
// Prevent retrieve_widgets() from running since Customizer already called it up front
|
||||
// Prevent widget & menu mapping from running since Customizer already called it up front
|
||||
if ( get_option( 'theme_switched_via_customizer' ) ) {
|
||||
remove_action( 'after_switch_theme', '_wp_menus_changed' );
|
||||
remove_action( 'after_switch_theme', '_wp_sidebars_changed' );
|
||||
update_option( 'theme_switched_via_customizer', false );
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '4.9-beta3-41994';
|
||||
$wp_version = '4.9-beta3-41995';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue