Make WordPress Core


Ignore:
Timestamp:
02/28/2012 01:28:56 AM (13 years ago)
Author:
nacin
Message:

Always return an absolute path in get_raw_theme_root() and get_theme_roots().

These functions were changed in [15641] to avoid any calculations when only one theme directory is registered. However, the short-circuit ended up being relative to WP_CONTENT_DIR, rather than absolute. This broke situations where theme roots are outside the content directory (technically allowed), and made return values inconsistent, as when multiple roots were registered, absolute paths were always returned.

fixes #17597. see #20103. see #14911.

File:
1 edited

Legend:

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

    r19995 r20001  
    476476
    477477    if ( count($wp_theme_directories) <= 1 )
    478         return '/themes';
     478        return get_theme_root();
    479479
    480480    $theme_roots = get_site_transient( 'theme_roots' );
     
    548548 * @return bool
    549549 */
    550 function register_theme_directory( $directory) {
     550function register_theme_directory( $directory ) {
    551551    global $wp_theme_directories;
    552552
    553     /* If this folder does not exist, return and do not register */
    554     if ( !file_exists( $directory ) )
    555             /* Try prepending as the theme directory could be relative to the content directory */
    556         $registered_directory = WP_CONTENT_DIR . '/' . $directory;
    557     else
    558         $registered_directory = $directory;
    559 
    560     /* If this folder does not exist, return and do not register */
    561     if ( !file_exists( $registered_directory ) )
    562         return false;
    563 
    564     $wp_theme_directories[] = $registered_directory;
     553    if ( ! file_exists( $directory ) ) {
     554        // Try prepending as the theme directory could be relative to the content directory
     555        $directory = WP_CONTENT_DIR . '/' . $directory;
     556        // If this directory does not exist, return and do not register
     557        if ( ! file_exists( $directory ) )
     558            return false;
     559    }
     560
     561    $wp_theme_directories[] = $directory;
    565562
    566563    return true;
     
    661658 */
    662659function get_theme_root( $stylesheet_or_template = false ) {
    663     if ( $stylesheet_or_template ) {
    664         if ( $theme_root = get_raw_theme_root($stylesheet_or_template) )
    665             $theme_root = WP_CONTENT_DIR . $theme_root;
    666         else
    667             $theme_root = WP_CONTENT_DIR . '/themes';
    668     } else {
     660    if ( $stylesheet_or_template && $theme_root = get_raw_theme_root( $stylesheet_or_template ) )
     661        $theme_root = $theme_root;
     662    else
    669663        $theme_root = WP_CONTENT_DIR . '/themes';
    670     }
    671664
    672665    return apply_filters( 'theme_root', $theme_root );
     
    686679    if ( $stylesheet_or_template ) {
    687680        if ( $theme_root = get_raw_theme_root($stylesheet_or_template) )
    688             $theme_root_uri = content_url( $theme_root );
     681            $theme_root_uri = content_url( str_replace( WP_CONTENT_DIR, '', $theme_root ) );
    689682        else
    690683            $theme_root_uri = content_url( 'themes' );
     
    697690
    698691/**
    699  * Get the raw theme root relative to the content directory with no filters applied.
     692 * Get the raw theme root with no filters applied.
    700693 *
    701694 * @since 3.1.0
     695 *
     696 * Before 3.4.0, this incorrectly returned a path relative to the content directory ("/themes") when
     697 * only one theme directory was registered. Absolute paths are now always returned.
    702698 *
    703699 * @param string $stylesheet_or_template The stylesheet or template name of the theme
     
    708704
    709705    if ( count($wp_theme_directories) <= 1 )
    710         return '/themes';
     706        return WP_CONTENT_DIR . '/themes';
    711707
    712708    $theme_root = false;
Note: See TracChangeset for help on using the changeset viewer.