WordPress.org

Make WordPress Core

Ticket #24049: ticket24049.diff

File ticket24049.diff, 1.4 KB (added by Daedalon, 5 years ago)

Sorts file list alphabetically by full path and improves performance of get_plugin_files() by calling plugin_basename() only once

  • plugin.php

     
    183183        $plugin_file = WP_PLUGIN_DIR . '/' . $plugin; 
    184184        $dir = dirname($plugin_file); 
    185185        $plugin_files = array($plugin); 
     186        $plugin_basedir = plugin_basename( $dir ); 
    186187        if ( is_dir($dir) && $dir != WP_PLUGIN_DIR ) { 
    187188                $plugins_dir = @ opendir( $dir ); 
    188189                if ( $plugins_dir ) { 
     
    195196                                                while (($subfile = readdir( $plugins_subdir ) ) !== false ) { 
    196197                                                        if ( substr($subfile, 0, 1) == '.' ) 
    197198                                                                continue; 
    198                                                         $plugin_files[] = plugin_basename("$dir/$file/$subfile"); 
     199                                                        $plugin_files[] = "$plugin_basedir/$file/$subfile"; 
    199200                                                } 
    200201                                                @closedir( $plugins_subdir ); 
    201202                                        } 
    202203                                } else { 
    203                                         if ( plugin_basename("$dir/$file") != $plugin ) 
    204                                                 $plugin_files[] = plugin_basename("$dir/$file"); 
     204                                        if ( "$plugin_basedir/$file" != $plugin ) 
     205                                                $plugin_files[] = "$plugin_basedir/$file"; 
    205206                                } 
    206207                        } 
    207208                        @closedir( $plugins_dir ); 
    208209                } 
    209210        } 
     211        sort( $plugin_files ); 
     212        $plugin_root_files = array(); 
     213        foreach ( $plugin_files as $key => $value ) { 
     214                if ( ! preg_match( '_' . $plugin_basedir . '/.+/_', $value ) ) { 
     215                        $plugin_root_files[] = $value; 
     216                        unset( $plugin_files[ $key ] ); 
     217                } 
     218        } 
     219        $plugin_files = $plugin_root_files + $plugin_files; 
    210220 
    211221        return $plugin_files; 
    212222}