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}