WordPress.org

Make WordPress Core

Ticket #17597: 17597.diff

File 17597.diff, 3.2 KB (added by nacin, 2 years ago)
  • wp-includes/theme.php

     
    547547 * @param string $directory Either the full filesystem path to a theme folder or a folder within WP_CONTENT_DIR 
    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; 
     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        } 
    559560 
    560         /* If this folder does not exist, return and do not register */ 
    561         if ( !file_exists( $registered_directory ) ) 
    562                 return false; 
     561        $wp_theme_directories[] = $directory; 
    563562 
    564         $wp_theme_directories[] = $registered_directory; 
    565  
    566563        return true; 
    567564} 
    568565 
     
    660657 * @return string Theme path. 
    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) ) 
     660        global $wp_theme_directories; 
     661 
     662        if ( $stylesheet_or_template && $theme_root = get_raw_theme_root( $stylesheet_or_template ) ) { 
     663                // Always prepend WP_CONTENT_DIR unless the root currently registered as a theme directory. 
     664                // This gives relative theme roots the benefit of the doubt for the case where a current theme's 
     665                // root disappears. 
     666                if ( ! in_array( $theme_root, $wp_theme_directories ) ) 
    665667                        $theme_root = WP_CONTENT_DIR . $theme_root; 
    666                 else 
    667                         $theme_root = WP_CONTENT_DIR . '/themes'; 
    668668        } else { 
    669669                $theme_root = WP_CONTENT_DIR . '/themes'; 
    670670        } 
     
    683683 * @return string Themes URI. 
    684684 */ 
    685685function get_theme_root_uri( $stylesheet_or_template = false ) { 
    686         if ( $stylesheet_or_template ) { 
    687                 if ( $theme_root = get_raw_theme_root($stylesheet_or_template) ) 
     686        global $wp_theme_directories; 
     687 
     688        if ( $stylesheet_or_template && $theme_root = get_raw_theme_root( $stylesheet_or_template ) ) { 
     689                if ( in_array( $theme_root, $wp_theme_directories ) ) { 
     690                        // Absolute path. Make an educated guess. YMMV -- but note the filter below. 
     691                        if ( 0 === strpos( $theme_root, WP_CONTENT_DIR ) ) 
     692                                $theme_root_uri = content_url( str_replace( WP_CONTENT_DIR, '', $theme_root ) ); 
     693                        elseif ( 0 === strpos( $theme_root, ABSPATH ) ) 
     694                                $theme_root_uri = site_url( str_replace( ABSPATH, '', $theme_root ) ); 
     695                        elseif ( 0 === strpos( $theme_root, WP_PLUGIN_DIR ) || 0 === strpos( $theme_root, WPMU_PLUGIN_DIR ) ) 
     696                                $theme_root_uri = plugins_url( basename( $theme_root ), $theme_root ); 
     697                        else 
     698                                $theme_root_uri = $theme_root; 
     699                } else { 
    688700                        $theme_root_uri = content_url( $theme_root ); 
    689                 else 
    690                         $theme_root_uri = content_url( 'themes' ); 
     701                } 
    691702        } else { 
    692703                $theme_root_uri = content_url( 'themes' ); 
    693704        }