- if ( $old_theme->exists() )
- do_action( 'after_switch_theme', $old_theme->get('Name'), $old_theme );
- else
+ // Prevent retrieve_widgets() from running since Customizer already called it up front
+ if ( get_option( 'theme_switched_via_customizer' ) ) {
+ remove_action( 'after_switch_theme', '_wp_sidebars_changed' );
+ update_option( 'theme_switched_via_customizer', false );
+ }
+
+ if ( $old_theme->exists() ) {
+ /**
+ * Fires on the first WP load after a theme switch if the old theme still exists.
+ *
+ * This action fires multiple times and the parameters differs
+ * according to the context, if the old theme exists or not.
+ * If the old theme is missing, the parameter will be the slug
+ * of the old theme.
+ *
+ * @since 3.3.0
+ *
+ * @param string $old_name Old theme name.
+ * @param WP_Theme $old_theme WP_Theme instance of the old theme.
+ */
+ do_action( 'after_switch_theme', $old_theme->get( 'Name' ), $old_theme );
+ } else {
+ /** This action is documented in wp-includes/theme.php */