mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 14:20:15 +00:00
Widgets: Preserve classic sidebars when switching to a block theme.
When switching to a block theme, classic sidebars were orphaned and their widgets remapping to the `'wp_inactive_widgets'` sidebar . This changeset preserves the sidebars and their widgets, providing a migration path to a block theme without losing the widgets. Classic sidebars are now: * Stored in a new theme mod called `'wp_classic_sidebars'`; * Restored to the `$wp_registered_sidebars` global variable when the `'widgets_init'` action fires (via a new internal function called `_wp_block_theme_register_classic_sidebars()`); * And marked as `'inactive'` when interacting with sidebars REST API endpoint. References: * [https://github.com/WordPress/gutenberg/pull/45509 Gutenberg PR 45509] which adds an option for importing widgets from sidebars into template parts. Follow-up to [50995], [6334]. Props mamaduka, audrasjb, hellofromTonya, ironprogrammer, jameskoster, joen, matveb, mukesh27, noisysocks, poena, youknowriad. Fixes #57531. git-svn-id: https://develop.svn.wordpress.org/trunk@55200 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -733,11 +733,12 @@ function locale_stylesheet() {
|
||||
* @global array $wp_theme_directories
|
||||
* @global WP_Customize_Manager $wp_customize
|
||||
* @global array $sidebars_widgets
|
||||
* @global array $wp_registered_sidebars
|
||||
*
|
||||
* @param string $stylesheet Stylesheet name.
|
||||
*/
|
||||
function switch_theme( $stylesheet ) {
|
||||
global $wp_theme_directories, $wp_customize, $sidebars_widgets;
|
||||
global $wp_theme_directories, $wp_customize, $sidebars_widgets, $wp_registered_sidebars;
|
||||
|
||||
$requirements = validate_theme_requirements( $stylesheet );
|
||||
if ( is_wp_error( $requirements ) ) {
|
||||
@@ -814,6 +815,11 @@ function switch_theme( $stylesheet ) {
|
||||
}
|
||||
}
|
||||
|
||||
// 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() );
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user