Make WordPress Core


Ignore:
Timestamp:
02/21/2024 07:24:12 PM (3 months ago)
Author:
joemcgill
Message:

Themes: Use original template paths when switching blogs.

This fixes a bug introduced by [57129] and [56635] in which deprecating the previous TEMPLATEPATH and STYLESHEETPATH constants in favor of get_template_directory() and get_stylesheet_directory() functions caused the active theme template path to change when using switch_to_blog().

This introduces a new function, wp_set_template_globals(), which is called during the bootstrap process to store the template paths to new globals values $wp_template_path and $wp_stylesheet_path. This restores behavior to how things worked prior to [56635] but retains the ability for template values to be reset for better testability.

Related #18298, #60025.

Props joemcgill, flixos90, mukesh27, swissspidy, manfcarlo, metropolis_john, jeremyfelt.
Fixes #60290.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/theme.php

    r57608 r57685  
    154154 *
    155155 * @since 3.0.0
     156 * @since 6.5.0 Makes use of global template variables.
     157 *
     158 * @global string $wp_stylesheet_path Path to current theme's stylesheet directory.
     159 * @global string $wp_template_path   Path to current theme's template directory.
    156160 *
    157161 * @return bool True if a child theme is in use, false otherwise.
    158162 */
    159163function is_child_theme() {
    160     return get_template_directory() !== get_stylesheet_directory();
     164    global $wp_stylesheet_path, $wp_template_path;
     165
     166    return $wp_stylesheet_path !== $wp_template_path;
    161167}
    162168
     
    836842
    837843    update_option( 'theme_switched', $old_theme->get_stylesheet() );
     844
     845    /*
     846     * Reset template globals when switching themes outside of a switched blog
     847     * context to ensure templates will be loaded from the new theme.
     848     */
     849    if ( ! is_multisite() || ! ms_is_switched() ) {
     850        wp_set_template_globals();
     851    }
    838852
    839853    // Clear pattern caches.
Note: See TracChangeset for help on using the changeset viewer.