diff options
Diffstat (limited to 'wp-includes/theme.php')
-rw-r--r-- | wp-includes/theme.php | 58 |
1 files changed, 49 insertions, 9 deletions
diff --git a/wp-includes/theme.php b/wp-includes/theme.php index 89fccdd..7157318 100644 --- a/wp-includes/theme.php +++ b/wp-includes/theme.php @@ -153,11 +153,17 @@ function wp_clean_themes_cache( $clear_update_cache = true ) { * Whether a child theme is in use. * * @since 3.0.0 + * @since 6.5.0 Makes use of global template variables. + * + * @global string $wp_stylesheet_path Path to current theme's stylesheet directory. + * @global string $wp_template_path Path to current theme's template directory. * * @return bool True if a child theme is in use, false otherwise. */ function is_child_theme() { - return get_template_directory() !== get_stylesheet_directory(); + global $wp_stylesheet_path, $wp_template_path; + + return $wp_stylesheet_path !== $wp_template_path; } /** @@ -836,9 +842,26 @@ function switch_theme( $stylesheet ) { 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. - $new_theme->delete_pattern_cache(); - $old_theme->delete_pattern_cache(); + 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. @@ -1437,14 +1460,16 @@ function is_random_header_image( $type = 'any' ) { if ( 'any' === $type ) { if ( 'random-default-image' === $header_image_mod || 'random-uploaded-image' === $header_image_mod - || ( '' !== get_random_header_image() && empty( $header_image_mod ) ) + || ( empty( $header_image_mod ) && '' !== get_random_header_image() ) ) { return true; } } else { if ( "random-$type-image" === $header_image_mod ) { return true; - } elseif ( 'default' === $type && empty( $header_image_mod ) && '' !== get_random_header_image() ) { + } elseif ( 'default' === $type + && empty( $header_image_mod ) && '' !== get_random_header_image() + ) { return true; } } @@ -2603,18 +2628,31 @@ function get_theme_starter_content() { * @since 5.3.0 The `html5` feature now also accepts 'script' and 'style'. * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. + * @since 5.4.0 The `disable-custom-gradients` feature limits to default gradients or gradients added + * through `editor-gradient-presets` theme support. * @since 5.5.0 The `core-block-patterns` feature was added and is enabled by default. * @since 5.5.0 The `custom-logo` feature now also accepts 'unlink-homepage-logo'. * @since 5.6.0 The `post-formats` feature warns if no array is passed as the second parameter. * @since 5.8.0 The `widgets-block-editor` feature enables the Widgets block editor. + * @since 5.8.0 The `block-templates` feature indicates whether a theme uses block-based templates. * @since 6.0.0 The `html5` feature warns if no array is passed as the second parameter. + * @since 6.1.0 The `block-template-parts` feature allows to edit any reusable template part from site editor. + * @since 6.1.0 The `disable-layout-styles` feature disables the default layout styles. + * @since 6.3.0 The `link-color` feature allows to enable the link color setting. + * @since 6.3.0 The `border` feature allows themes without theme.json to add border styles to blocks. + * @since 6.5.0 The `appearance-tools` feature enables a few design tools for blocks, + * see `WP_Theme_JSON::APPEARANCE_TOOLS_OPT_INS` for a complete list. * * @global array $_wp_theme_features * * @param string $feature The feature being added. Likely core values include: * - 'admin-bar' * - 'align-wide' + * - 'appearance-tools' * - 'automatic-feed-links' + * - 'block-templates' + * - 'block-template-parts' + * - 'border' * - 'core-block-patterns' * - 'custom-background' * - 'custom-header' @@ -2626,21 +2664,24 @@ function get_theme_starter_content() { * - 'dark-editor-style' * - 'disable-custom-colors' * - 'disable-custom-font-sizes' + * - 'disable-custom-gradients' + * - 'disable-layout-styles' * - 'editor-color-palette' * - 'editor-gradient-presets' * - 'editor-font-sizes' * - 'editor-styles' * - 'featured-content' * - 'html5' + * - 'link-color' * - 'menus' * - 'post-formats' * - 'post-thumbnails' * - 'responsive-embeds' * - 'starter-content' * - 'title-tag' - * - 'wp-block-styles' * - 'widgets' * - 'widgets-block-editor' + * - 'wp-block-styles' * @param mixed ...$args Optional extra arguments to pass along with certain features. * @return void|false Void on success, false on failure. */ @@ -2777,7 +2818,7 @@ function add_theme_support( $feature, ...$args ) { * the constant is always accurate (and is not defined later, overriding our value). * As stated above, the first value wins. * Once we get to wp_loaded (just-in-time), define any constants we haven't already. - * Constants are lame. Don't reference them. This is just for backward compatibility. + * Constants should be avoided. Don't reference them. This is just for backward compatibility. */ if ( defined( 'NO_HEADER_TEXT' ) ) { @@ -3582,7 +3623,6 @@ function _wp_customize_include() { * @since 4.7.0 * @access private * - * @global wpdb $wpdb WordPress database abstraction object. * @global WP_Customize_Manager $wp_customize Customizer instance. * * @param string $new_status New post status. @@ -3590,7 +3630,7 @@ function _wp_customize_include() { * @param WP_Post $changeset_post Changeset post object. */ function _wp_customize_publish_changeset( $new_status, $old_status, $changeset_post ) { - global $wp_customize, $wpdb; + global $wp_customize; $is_publishing_changeset = ( 'customize_changeset' === $changeset_post->post_type |