WordPress.org

Make WordPress Core

Ticket #18200: 18200.3.diff

File 18200.3.diff, 1.6 KB (added by nacin, 8 years ago)

What delete_plugins() might need to delete language files. Let's ignore this entirely for now. If we wanted to, we could clear up unused language files on a future update.

  • src/wp-admin/includes/plugin.php

     
    787787
    788788        $errors = array();
    789789
     790        $translation_data = wp_get_installed_translations();
    790791        foreach( $plugins as $plugin_file ) {
    791792                // Run Uninstall hook
    792793                if ( is_uninstallable_plugin( $plugin_file ) )
     
    794795
    795796                $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) );
    796797                // If plugin is in its own directory, recursively delete the directory.
    797                 if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory separator AND that it's not the root plugin folder
     798                // Base check on if plugin includes directory separator AND that it's not the root plugin folder.
     799                if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) {
    798800                        $deleted = $wp_filesystem->delete($this_plugin_dir, true);
    799                 else
     801
     802                        // Remove any translation files.
     803                        $slug = basename( $this_plugin_dir );
     804                        if ( isset( $translation_data[ $slug ] ) ) {
     805                                if ( ! isset( $lang_dir ) )
     806                                        $lang_dir = $wp_filesystem->wp_lang_dir();
     807                                if ( $lang_dir ) {
     808                                        foreach ( $translation_data[ $slug ] as $language => $po_file_data ) {
     809                                                $wp_filesystem->delete( trailingslashit( $lang_dir ) . "plugins/$slug-$language.po" );
     810                                                $wp_filesystem->delete( trailingslashit( $lang_dir ) . "plugins/$slug-$language.mo" );
     811                                        }
     812                                }
     813                        }
     814                } else {
    800815                        $deleted = $wp_filesystem->delete($plugins_dir . $plugin_file);
     816                }
    801817
    802818                if ( ! $deleted )
    803819                        $errors[] = $plugin_file;