WordPress.org

Make WordPress Core

Changeset 20016


Ignore:
Timestamp:
02/28/12 18:02:21 (2 years ago)
Author:
nacin
Message:

Fix the return value of get_theme_root() when the theme root is outside of WP_CONTENT_DIR, thus making it absolute rather than the typical relative theme root.

Make get_theme_root_uri() tolerate an absolute path for a theme root. It will now make an attempt to find a corresponding URL for absolute paths as well.

see #17597.

File:
1 edited

Legend:

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

    r20015 r20016  
    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) ) 
     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 when things go haywire. 
     665        if ( ! in_array( $theme_root, $wp_theme_directories ) ) 
    665666            $theme_root = WP_CONTENT_DIR . $theme_root; 
    666         else 
    667             $theme_root = WP_CONTENT_DIR . '/themes'; 
    668667    } else { 
    669668        $theme_root = WP_CONTENT_DIR . '/themes'; 
     
    684683 */ 
    685684function get_theme_root_uri( $stylesheet_or_template = false ) { 
    686     if ( $stylesheet_or_template ) { 
    687         if ( $theme_root = get_raw_theme_root($stylesheet_or_template) ) 
     685    global $wp_theme_directories; 
     686 
     687    if ( $stylesheet_or_template && $theme_root = get_raw_theme_root( $stylesheet_or_template ) ) { 
     688        if ( in_array( $theme_root, $wp_theme_directories ) ) { 
     689            // Absolute path. Make an educated guess. YMMV -- but note the filter below. 
     690            if ( 0 === strpos( $theme_root, WP_CONTENT_DIR ) ) 
     691                $theme_root_uri = content_url( str_replace( WP_CONTENT_DIR, '', $theme_root ) ); 
     692            elseif ( 0 === strpos( $theme_root, ABSPATH ) ) 
     693                $theme_root_uri = site_url( str_replace( ABSPATH, '', $theme_root ) ); 
     694            elseif ( 0 === strpos( $theme_root, WP_PLUGIN_DIR ) || 0 === strpos( $theme_root, WPMU_PLUGIN_DIR ) ) 
     695                $theme_root_uri = plugins_url( basename( $theme_root ), $theme_root ); 
     696            else 
     697                $theme_root_uri = $theme_root; 
     698        } else { 
    688699            $theme_root_uri = content_url( $theme_root ); 
    689         else 
    690             $theme_root_uri = content_url( 'themes' ); 
     700        } 
    691701    } else { 
    692702        $theme_root_uri = content_url( 'themes' ); 
Note: See TracChangeset for help on using the changeset viewer.