diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/widgets.php --- a/wp/wp-includes/widgets.php Wed Sep 21 18:19:35 2022 +0200 +++ b/wp/wp-includes/widgets.php Tue Sep 27 16:37:53 2022 +0200 @@ -220,6 +220,7 @@ * * @since 2.2.0 * @since 5.6.0 Added the `before_sidebar` and `after_sidebar` arguments. + * @since 5.9.0 Added the `show_in_rest` argument. * * @global array $wp_registered_sidebars Registered sidebars. * @@ -250,6 +251,8 @@ * @type string $after_sidebar HTML content to append to the sidebar when displayed. * Outputs before the {@see 'dynamic_sidebar_after'} action. * Default empty string. + * @type bool $show_in_rest Whether to show this sidebar publicly in the REST API. + * Defaults to only showing the sidebar to administrator users. * } * @return string Sidebar ID added to $wp_registered_sidebars global. */ @@ -272,6 +275,7 @@ 'after_title' => "\n", 'before_sidebar' => '', 'after_sidebar' => '', + 'show_in_rest' => false, ); /** @@ -485,7 +489,7 @@ * * @since 3.0.0 * - * @param int $id The widget ID. + * @param int|string $id The widget ID. */ do_action( 'wp_unregister_sidebar_widget', $id ); @@ -515,7 +519,7 @@ * @type int $width Width of the fully expanded control form (but try hard to use the default width). * Default 250. * @type int|string $id_base Required for multi-widgets, i.e widgets that allow multiple instances such as the - * text widget. The widget id will end up looking like `{$id_base}-{$unique_number}`. + * text widget. The widget ID will end up looking like `{$id_base}-{$unique_number}`. * } * @param mixed ...$params Optional additional parameters to pass to the callback function when it's called. */ @@ -1036,6 +1040,35 @@ } /** + * Retrieves the registered sidebar with the given ID. + * + * @since 5.9.0 + * + * @global array $wp_registered_sidebars The registered sidebars. + * + * @param string $id The sidebar ID. + * @return array|null The discovered sidebar, or null if it is not registered. + */ +function wp_get_sidebar( $id ) { + global $wp_registered_sidebars; + + foreach ( (array) $wp_registered_sidebars as $sidebar ) { + if ( $sidebar['id'] === $id ) { + return $sidebar; + } + } + + if ( 'wp_inactive_widgets' === $id ) { + return array( + 'id' => 'wp_inactive_widgets', + 'name' => __( 'Inactive widgets' ), + ); + } + + return null; +} + +/** * Set the sidebar widget option to update sidebars. * * @since 2.2.0 @@ -1255,7 +1288,17 @@ } /** - * Look for "lost" widgets, this has to run at least on each theme change. + * Validates and remaps any "orphaned" widgets to wp_inactive_widgets sidebar, + * and saves the widget settings. This has to run at least on each theme change. + * + * For example, let's say theme A has a "footer" sidebar, and theme B doesn't have one. + * After switching from theme A to theme B, all the widgets previously assigned + * to the footer would be inaccessible. This function detects this scenario, and + * moves all the widgets previously assigned to the footer under wp_inactive_widgets. + * + * Despite the word "retrieve" in the name, this function actually updates the database + * and the global `$sidebars_widgets`. For that reason it should not be run on front end, + * unless the `$theme_changed` value is 'customize' (to bypass the database write). * * @since 2.8.0 * @@ -1310,6 +1353,7 @@ $sidebars_widgets['wp_inactive_widgets'] = array_merge( $lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets'] ); if ( 'customize' !== $theme_changed ) { + // Update the widgets settings in the database. wp_set_sidebars_widgets( $sidebars_widgets ); } @@ -1728,11 +1772,12 @@ $show_summary = isset( $widget_rss['show_summary'] ) ? (int) $widget_rss['show_summary'] : 0; $show_author = isset( $widget_rss['show_author'] ) ? (int) $widget_rss['show_author'] : 0; $show_date = isset( $widget_rss['show_date'] ) ? (int) $widget_rss['show_date'] : 0; + $error = false; + $link = ''; if ( $check_feed ) { - $rss = fetch_feed( $url ); - $error = false; - $link = ''; + $rss = fetch_feed( $url ); + if ( is_wp_error( $rss ) ) { $error = $rss->get_error_message(); } else { @@ -1828,15 +1873,15 @@ * * @since 5.8.0 * - * @return boolean Whether or not to use the block editor to manage widgets. + * @return bool Whether to use the block editor to manage widgets. */ function wp_use_widgets_block_editor() { /** - * Filters whether or not to use the block editor to manage widgets. + * Filters whether to use the block editor to manage widgets. * * @since 5.8.0 * - * @param boolean $use_widgets_block_editor Whether or not to use the block editor to manage widgets. + * @param bool $use_widgets_block_editor Whether to use the block editor to manage widgets. */ return apply_filters( 'use_widgets_block_editor', @@ -1871,8 +1916,8 @@ * * @since 5.8.0 * - * @param string $widget_id The widget id to look for. - * @return string|null The found sidebar's id, or null if it was not found. + * @param string $widget_id The widget ID to look for. + * @return string|null The found sidebar's ID, or null if it was not found. */ function wp_find_widgets_sidebar( $widget_id ) { foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) { @@ -1891,8 +1936,8 @@ * * @since 5.8.0 * - * @param string $widget_id The widget id to assign. - * @param string $sidebar_id The sidebar id to assign to. If empty, the widget won't be added to any sidebar. + * @param string $widget_id The widget ID to assign. + * @param string $sidebar_id The sidebar ID to assign to. If empty, the widget won't be added to any sidebar. */ function wp_assign_widget_to_sidebar( $widget_id, $sidebar_id ) { $sidebars = wp_get_sidebars_widgets(); @@ -1901,7 +1946,7 @@ foreach ( $widgets as $i => $maybe_widget_id ) { if ( $widget_id === $maybe_widget_id && $sidebar_id !== $maybe_sidebar_id ) { unset( $sidebars[ $maybe_sidebar_id ][ $i ] ); - // We could technically break 2 here, but continue looping in case the id is duplicated. + // We could technically break 2 here, but continue looping in case the ID is duplicated. continue 2; } } @@ -2035,14 +2080,26 @@ if ( $wp_scripts->query( 'wp-editor', 'enqueued' ) ) { _doing_it_wrong( 'wp_enqueue_script()', - '"wp-editor" script should not be enqueued together with the new widgets editor (wp-edit-widgets or wp-customize-widgets).', + sprintf( + /* translators: 1: 'wp-editor', 2: 'wp-edit-widgets', 3: 'wp-customize-widgets'. */ + __( '"%1$s" script should not be enqueued together with the new widgets editor (%2$s or %3$s).' ), + 'wp-editor', + 'wp-edit-widgets', + 'wp-customize-widgets' + ), '5.8.0' ); } if ( $wp_styles->query( 'wp-edit-post', 'enqueued' ) ) { _doing_it_wrong( 'wp_enqueue_style()', - '"wp-edit-post" style should not be enqueued together with the new widgets editor (wp-edit-widgets or wp-customize-widgets).', + sprintf( + /* translators: 1: 'wp-edit-post', 2: 'wp-edit-widgets', 3: 'wp-customize-widgets'. */ + __( '"%1$s" style should not be enqueued together with the new widgets editor (%2$s or %3$s).' ), + 'wp-edit-post', + 'wp-edit-widgets', + 'wp-customize-widgets' + ), '5.8.0' ); }