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. git-svn-id: https://develop.svn.wordpress.org/trunk@41995 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
a411d5571a
commit
619f0b4b34
@ -529,10 +529,11 @@ final class WP_Customize_Nav_Menus {
|
|||||||
* @since 4.3.0
|
* @since 4.3.0
|
||||||
*/
|
*/
|
||||||
public function customize_register() {
|
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.
|
// Preview settings for nav menus early so that the sections and controls will be added properly.
|
||||||
$nav_menus_setting_ids = array();
|
$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 ) ) {
|
if ( preg_match( '/^(nav_menu_locations|nav_menu|nav_menu_item)\[/', $setting_id ) ) {
|
||||||
$nav_menus_setting_ids[] = $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.
|
// 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 ] );
|
$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' );
|
$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 ) {
|
if ( func_num_args() > 1 ) {
|
||||||
$stylesheet = func_get_arg( 1 );
|
$stylesheet = func_get_arg( 1 );
|
||||||
@ -2724,8 +2724,9 @@ function check_theme_switched() {
|
|||||||
if ( $stylesheet = get_option( 'theme_switched' ) ) {
|
if ( $stylesheet = get_option( 'theme_switched' ) ) {
|
||||||
$old_theme = wp_get_theme( $stylesheet );
|
$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' ) ) {
|
if ( get_option( 'theme_switched_via_customizer' ) ) {
|
||||||
|
remove_action( 'after_switch_theme', '_wp_menus_changed' );
|
||||||
remove_action( 'after_switch_theme', '_wp_sidebars_changed' );
|
remove_action( 'after_switch_theme', '_wp_sidebars_changed' );
|
||||||
update_option( 'theme_switched_via_customizer', false );
|
update_option( 'theme_switched_via_customizer', false );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user