Make WordPress Core

Changeset 57685

Timestamp:
02/21/2024 07:24:12 PM (6 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.

Location:
trunk
Files:
9 edited

Legend:

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

    r57644 r57685  
    11611161 * @since 5.2.0
    11621162 *
     1163
     1164
     1165
    11631166 * @param string $theme    Single theme to resume.
    11641167 * @param string $redirect Optional. URL to redirect to. Default empty string.
     
    11671170 */
    11681171function resume_theme( $theme, $redirect = '' ) {
     1172
     1173
    11691174    list( $extension ) = explode( '/', $theme );
    11701175
     
    11741179     */
    11751180    if ( ! empty( $redirect ) ) {
    1176         $stylesheet_path = get_stylesheet_directory();
    1177         $template_path   = get_template_directory();
    1178 
    11791181        $functions_path = '';
    1180         if ( str_contains( $stylesheet_path, $extension ) ) {
    1181             $functions_path = $stylesheet_path . '/functions.php';
    1182         } elseif ( str_contains( $template_path, $extension ) ) {
    1183             $functions_path = $template_path . '/functions.php';
     1182        if ( str_contains( $stylesheet_path, $extension ) ) {
     1183            $functions_path = $stylesheet_path . '/functions.php';
     1184        } elseif ( str_contains( $template_path, $extension ) ) {
     1185            $functions_path = $template_path . '/functions.php';
    11841186        }
    11851187
  • trunk/src/wp-includes/comment-template.php

    r57648 r57685  
    13911391 * @since 1.5.0
    13921392 *
    1393  * @global WP_Query   $wp_query         WordPress Query object.
    1394  * @global WP_Post    $post             Global post object.
    1395  * @global wpdb       $wpdb             WordPress database abstraction object.
     1393 * @global WP_Query   $wp_query         WordPress Query object.
     1394 * @global WP_Post    $post             Global post object.
     1395 * @global wpdb       $wpdb             WordPress database abstraction object.
    13961396 * @global int        $id
    1397  * @global WP_Comment $comment          Global comment object.
     1397 * @global WP_Comment $comment          Global comment object.
    13981398 * @global string     $user_login
    13991399 * @global string     $user_identity
    14001400 * @global bool       $overridden_cpage
    14011401 * @global bool       $withcomments
     1402
     1403
    14021404 *
    14031405 * @param string $file              Optional. The file to load. Default '/comments.php'.
     
    14061408 */
    14071409function comments_template( $file = '/comments.php', $separate_comments = false ) {
    1408     global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_identity, $overridden_cpage;
     1410    global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_identity, $overridden_cpage;
    14091411
    14101412    if ( ! ( is_single() || is_page() || $withcomments ) || empty( $post ) ) {
     
    16011603    }
    16021604
    1603     $stylesheet_path = get_stylesheet_directory();
    1604     $template_path   = get_template_directory();
    1605 
    1606     $theme_template = $stylesheet_path . $file;
     1605    $theme_template = trailingslashit( $wp_stylesheet_path ) . $file;
    16071606
    16081607    /**
     
    16171616    if ( file_exists( $include ) ) {
    16181617        require $include;
    1619     } elseif ( file_exists( $template_path . $file ) ) {
    1620         require $template_path . $file;
     1618    } elseif ( file_exists( . $file ) ) {
     1619        require . $file;
    16211620    } else { // Backward compat code will be removed in a future release.
    16221621        require ABSPATH . WPINC . '/theme-compat/comments.php';
  • trunk/src/wp-includes/load.php

    r57608 r57685  
    10471047 * @access private
    10481048 *
    1049  * @global string $pagenow The filename of the current screen.
     1049 * @global string $pagenow            The filename of the current screen.
     1050 * @global string $wp_stylesheet_path Path to current theme's stylesheet directory.
     1051 * @global string $wp_template_path   Path to current theme's template directory.
    10501052 *
    10511053 * @return string[] Array of absolute paths to theme directories.
    10521054 */
    10531055function wp_get_active_and_valid_themes() {
    1054     global $pagenow;
     1056    global $pagenow;
    10551057
    10561058    $themes = array();
     
    10601062    }
    10611063
    1062     $stylesheet_path = get_stylesheet_directory();
    1063     $template_path   = get_template_directory();
    1064 
    1065     if ( $template_path !== $stylesheet_path ) {
    1066         $themes[] = $stylesheet_path;
    1067     }
    1068 
    1069     $themes[] = $template_path;
     1064    if ( is_child_theme() ) {
     1065        $themes[] = $wp_stylesheet_path;
     1066    }
     1067
     1068    $themes[] = $wp_template_path;
    10701069
    10711070    /*
  • trunk/src/wp-includes/template.php

    r57223 r57685  
    681681
    682682/**
     683
     684
     685
     686
     687
     688
     689
     690
     691
     692
     693
     694
     695
     696
     697
    683698 * Retrieves the name of the highest priority template file that exists.
    684699 *
     
    689704 * @since 2.7.0
    690705 * @since 5.5.0 The `$args` parameter was added.
     706
     707
     708
    691709 *
    692710 * @param string|array $template_names Template file(s) to search for, in order.
     
    699717 */
    700718function locate_template( $template_names, $load = false, $load_once = true, $args = array() ) {
    701     $stylesheet_path = get_stylesheet_directory();
    702     $template_path   = get_template_directory();
    703     $is_child_theme  = $stylesheet_path !== $template_path;
     719    global $wp_stylesheet_path, $wp_template_path;
     720
     721    if ( ! isset( $wp_stylesheet_path ) || ! isset( $wp_template_path ) ) {
     722        wp_set_template_globals();
     723    }
     724
     725    $is_child_theme = is_child_theme();
    704726
    705727    $located = '';
     
    708730            continue;
    709731        }
    710         if ( file_exists( $stylesheet_path . '/' . $template_name ) ) {
    711             $located = $stylesheet_path . '/' . $template_name;
     732        if ( file_exists( $stylesheet_path . '/' . $template_name ) ) {
     733            $located = $stylesheet_path . '/' . $template_name;
    712734            break;
    713         } elseif ( $is_child_theme && file_exists( $template_path . '/' . $template_name ) ) {
    714             $located = $template_path . '/' . $template_name;
     735        } elseif ( $is_child_theme && file_exists( $template_path . '/' . $template_name ) ) {
     736            $located = $template_path . '/' . $template_name;
    715737            break;
    716738        } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
  • trunk/src/wp-includes/theme.php

    r57608 r57685  
    154154 *
    155155 * @since 3.0.0
     156
     157
     158
     159
    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
     847
     848
     849
     850
     851
    838852
    839853    // Clear pattern caches.
  • trunk/src/wp-settings.php

    r57661 r57685  
    609609do_action( 'setup_theme' );
    610610
    611 // Define the template related constants.
     611// Define the template related constants.
    612612wp_templating_constants();
     613
    613614
    614615// Load the default text localization domain.
  • trunk/tests/phpunit/includes/abstract-testcase.php

    r57608 r57685  
    190190         */
    191191        $GLOBALS['wp_sitemaps'] = null;
     192
     193
     194
     195
    192196
    193197        $this->unregister_all_meta_keys();
  • trunk/tests/phpunit/tests/comment/metaCache.php

    r56549 r57685  
    66    protected $i       = 0;
    77    protected $queries = 0;
     8
     9
     10
     11
     12
     13
     14
     15
    816
    917    /**
  • trunk/tests/phpunit/tests/theme.php

    r57244 r57685  
    13061306        $this->assertSame( $new_root . '/test-parent', $path2, 'The new template path is not correct' );
    13071307    }
     1308
     1309
     1310
     1311
     1312
     1313
     1314
     1315
     1316
     1317
     1318
     1319
     1320
     1321
     1322
     1323
     1324
     1325
     1326
     1327
     1328
     1329
     1330
     1331
     1332
     1333
    13081334}
Note: See TracChangeset for help on using the changeset viewer.