WordPress.org

Make WordPress Core

Ticket #6531: 6531.5b.diff

File 6531.5b.diff, 1.5 KB (added by WraithKenny, 4 months ago)

Changes for WP_Theme::get_files(), caches all files, and reduces returns based on $type and $depth

  • src/wp-includes/class-wp-theme.php

     
    976976         *                   being absolute paths. 
    977977         */ 
    978978        public function get_files( $type = null, $depth = 0, $search_parent = false ) { 
    979                 $files = (array) self::scandir( $this->get_stylesheet_directory(), $type, $depth ); 
     979                // get and cache all theme files to start with. 
     980                $label = 'list_files_cache_' . $this->get('Name') . '-' . $this->get('Version'); 
     981                $all_files = get_transient( $label ); 
     982                if ( empty( $all_files ) ) { 
     983                        $all_files = (array) self::scandir( $this->get_stylesheet_directory(), null, -1 ); 
    980984 
    981                 if ( $search_parent && $this->parent() ) 
    982                         $files += (array) self::scandir( $this->get_template_directory(), $type, $depth ); 
     985                        if ( $search_parent && $this->parent() ) 
     986                                $all_files += (array) self::scandir( $this->get_template_directory(), null, -1 ); 
    983987 
     988                        set_transient( $label, $all_files, HOUR_IN_SECONDS ); 
     989                } 
     990 
     991                // Filter $all_files by $type & $depth 
     992                $files = array(); 
     993                if ( $type ) { 
     994                        $type = (array) $type; 
     995                        $_extensions = implode( '|', $type ); 
     996                } 
     997                foreach ($all_files as $key => $file) { 
     998                        if ( -1 != $depth && substr_count($key,'/') > $depth ) continue; // Filter by depth. 
     999                        if ( ! $type || preg_match( '~\.(' . $_extensions . ')$~', $file ) ) { // Filter by type. 
     1000                                $files[ $key ] = $file; 
     1001                        } 
     1002                } 
     1003 
    9841004                return $files; 
    9851005        } 
    9861006