# switch_theme()

URL: https://chugunov.pro/api-wordpress/functions/switch_theme/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.5.0.

## Сигнатура

```php
switch_theme( string $stylesheet )
```

## Описание

Принимает один аргумент: $stylesheet темы. Также поддерживает дополнительную сигнатуру функции из двух аргументов: $template, затем $stylesheet. Это сделано для обратной совместимости.

## Параметры

- `$stylesheet` `string` — обязательный. Имя таблицы стилей.

## Исходный код

Файл: `wp-includes/theme.php:757`

```php
function switch_theme( $stylesheet ) {
	global $wp_theme_directories, $wp_customize, $sidebars_widgets, $wp_registered_sidebars;

	$requirements = validate_theme_requirements( $stylesheet );
	if ( is_wp_error( $requirements ) ) {
		wp_die( $requirements );
	}

	$_sidebars_widgets = null;
	if ( 'wp_ajax_customize_save' === current_action() ) {
		$old_sidebars_widgets_data_setting = $wp_customize->get_setting( 'old_sidebars_widgets_data' );
		if ( $old_sidebars_widgets_data_setting ) {
			$_sidebars_widgets = $wp_customize->post_value( $old_sidebars_widgets_data_setting );
		}
	} elseif ( is_array( $sidebars_widgets ) ) {
		$_sidebars_widgets = $sidebars_widgets;
	}

	if ( is_array( $_sidebars_widgets ) ) {
		set_theme_mod(
			'sidebars_widgets',
			array(
				'time' => time(),
				'data' => $_sidebars_widgets,
			)
		);
	}

	$nav_menu_locations = get_theme_mod( 'nav_menu_locations' );
	update_option( 'theme_switch_menu_locations', $nav_menu_locations, true );

	if ( func_num_args() > 1 ) {
		$stylesheet = func_get_arg( 1 );
	}

	$old_theme = wp_get_theme();
	$new_theme = wp_get_theme( $stylesheet );
	$template  = $new_theme->get_template();

	if ( wp_is_recovery_mode() ) {
		$paused_themes = wp_paused_themes();
		$paused_themes->delete( $old_theme->get_stylesheet() );
		$paused_themes->delete( $old_theme->get_template() );
	}

	update_option( 'template', $template );
	update_option( 'stylesheet', $stylesheet );

	if ( count( $wp_theme_directories ) > 1 ) {
		update_option( 'template_root', get_raw_theme_root( $template, true ) );
		update_option( 'stylesheet_root', get_raw_theme_root( $stylesheet, true ) );
	} else {
		delete_option( 'template_root' );
		delete_option( 'stylesheet_root' );
	}

	$new_name = $new_theme->get( 'Name' );

	update_option( 'current_theme', $new_name );

	// Migrate from the old mods_{name} option to theme_mods_{slug}.
	if ( is_admin() && false === get_option( 'theme_mods_' . $stylesheet ) ) {
		$default_theme_mods = (array) get_option( 'mods_' . $new_name );
		if ( ! empty( $nav_menu_locations ) && empty( $default_theme_mods['nav_menu_locations'] ) ) {
			$default_theme_mods['nav_menu_locations'] = $nav_menu_locations;
		}
		add_option( "theme_mods_$stylesheet", $default_theme_mods );
	} else {
		/*
		 * Since retrieve_widgets() is called when initializing a theme in the Customizer,
		 * we need to remove the theme mods to avoid overwriting changes made via
		 * the Customizer when accessing wp-admin/widgets.php.
		 */
		if ( 'wp_ajax_customize_save' === current_action() ) {
			remove_theme_mod( 'sidebars_widgets' );
		}
	}

	// Stores classic sidebars for later use by block themes.
	if ( $new_theme->is_block_theme() ) {
		set_theme_mod( 'wp_classic_sidebars', $wp_registered_sidebars );
	}

	update_option( 'theme_switched', $old_theme->get_stylesheet() );

	/*
	 * Reset template globals when switching themes outside of a switched blog
	 * context to ensure templates will be loaded from the new theme.
	 */
	if ( ! is_multisite() || ! ms_is_switched() ) {
		wp_set_template_globals();
	}

	// Clear pattern caches.
	if ( ! is_multisite() ) {
		$new_theme->delete_pattern_cache();
		$old_theme->delete_pattern_cache();
	}

	// Set autoload=no for the old theme, autoload=yes for the switched theme.
	$theme_mods_options = array(
		'theme_mods_' . $stylesheet                  => 'yes',
		'theme_mods_' . $old_theme->get_stylesheet() => 'no',
	);
	wp_set_option_autoload_values( $theme_mods_options );

	/**
	 * Fires after the theme is switched.
	 *
	 * See 'after_switch_theme'.
	 *
	 * @since 1.5.0
	 * @since 4.5.0 Introduced the `$old_theme` parameter.
	 *
	 * @param string   $new_name  Name of the new theme.
	 * @param WP_Theme $new_theme WP_Theme instance of the new theme.
	 * @param WP_Theme $old_theme WP_Theme instance of the old theme.
	 */
	do_action( 'switch_theme', $new_name, $new_theme, $old_theme );
}
```

## История изменений

- 2.5.0 — Introduced.

## Связанные

Использует: [`wp_set_template_globals`](https://chugunov.pro/api-wordpress/functions/wp_set_template_globals/), [`wp_set_option_autoload_values`](https://chugunov.pro/api-wordpress/functions/wp_set_option_autoload_values/), [`validate_theme_requirements`](https://chugunov.pro/api-wordpress/functions/validate_theme_requirements/), [`wp_is_recovery_mode`](https://chugunov.pro/api-wordpress/functions/wp_is_recovery_mode/), [`wp_paused_themes`](https://chugunov.pro/api-wordpress/functions/wp_paused_themes/), [`set_theme_mod`](https://chugunov.pro/api-wordpress/functions/set_theme_mod/), [`remove_theme_mod`](https://chugunov.pro/api-wordpress/functions/remove_theme_mod/), [`get_theme_mod`](https://chugunov.pro/api-wordpress/functions/get_theme_mod/), [`get_raw_theme_root`](https://chugunov.pro/api-wordpress/functions/get_raw_theme_root/), [`current_action`](https://chugunov.pro/api-wordpress/functions/current_action/), [`delete_option`](https://chugunov.pro/api-wordpress/functions/delete_option/), [`add_option`](https://chugunov.pro/api-wordpress/functions/add_option/), [`ms_is_switched`](https://chugunov.pro/api-wordpress/functions/ms_is_switched/), [`switch_to_blog`](https://chugunov.pro/api-wordpress/functions/switch_to_blog/), [`wp_get_theme`](https://chugunov.pro/api-wordpress/functions/wp_get_theme/), `WP_Theme`, [`is_admin`](https://chugunov.pro/api-wordpress/functions/is_admin/), [`is_multisite`](https://chugunov.pro/api-wordpress/functions/is_multisite/), [`wp_die`](https://chugunov.pro/api-wordpress/functions/wp_die/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), [`update_option`](https://chugunov.pro/api-wordpress/functions/update_option/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/).
Используется в: `WP_Customize_Manager::save_changeset_post`, `Theme_Upgrader::current_after`, [`validate_current_theme`](https://chugunov.pro/api-wordpress/functions/validate_current_theme/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/switch_theme/
