switch_theme( string $stylesheet )
Switches the theme.
Description Description
Accepts one argument: $stylesheet of the theme. It also accepts an additional function signature of two arguments: $template then $stylesheet. This is for backward compatibility.
Parameters Parameters
- $stylesheet
-
(string) (Required) Stylesheet name
Source Source
File: wp-includes/theme.php
713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 | function switch_theme( $stylesheet ) { global $wp_theme_directories , $wp_customize , $sidebars_widgets ; $_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 ); 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(); 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' ); } } update_option( 'theme_switched' , $old_theme ->get_stylesheet() ); /** * Fires after the theme is switched. * * @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 ); } |
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
2.5.0 | Introduced. |