mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 14:20:15 +00:00
Language packs: Remove translations when deleting a theme or a plugin.
This is for translation files in WP_LANG_DIR which are installed through a language pack. Change `wp_get_installed_translations()` to only return a translation if the .mo file also exists. fixes #29860. git-svn-id: https://develop.svn.wordpress.org/trunk@29856 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -797,29 +797,50 @@ function delete_plugins( $plugins, $deprecated = '' ) {
|
||||
if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() )
|
||||
return new WP_Error('fs_error', __('Filesystem error.'), $wp_filesystem->errors);
|
||||
|
||||
//Get the base plugin folder
|
||||
// Get the base plugin folder.
|
||||
$plugins_dir = $wp_filesystem->wp_plugins_dir();
|
||||
if ( empty($plugins_dir) )
|
||||
return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.'));
|
||||
if ( empty( $plugins_dir ) ) {
|
||||
return new WP_Error( 'fs_no_plugins_dir', __( 'Unable to locate WordPress Plugin directory.' ) );
|
||||
}
|
||||
|
||||
$plugins_dir = trailingslashit( $plugins_dir );
|
||||
|
||||
$translations_dir = $wp_filesystem->wp_lang_dir();
|
||||
$translations_dir = trailingslashit( $translations_dir );
|
||||
|
||||
$plugin_translations = wp_get_installed_translations( 'plugins' );
|
||||
|
||||
$errors = array();
|
||||
|
||||
foreach( $plugins as $plugin_file ) {
|
||||
// Run Uninstall hook
|
||||
if ( is_uninstallable_plugin( $plugin_file ) )
|
||||
// Run Uninstall hook.
|
||||
if ( is_uninstallable_plugin( $plugin_file ) ) {
|
||||
uninstall_plugin($plugin_file);
|
||||
}
|
||||
|
||||
$this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) );
|
||||
$this_plugin_dir = trailingslashit( dirname( $plugins_dir . $plugin_file ) );
|
||||
// If plugin is in its own directory, recursively delete the directory.
|
||||
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
|
||||
$deleted = $wp_filesystem->delete($this_plugin_dir, true);
|
||||
else
|
||||
$deleted = $wp_filesystem->delete($plugins_dir . $plugin_file);
|
||||
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
|
||||
$deleted = $wp_filesystem->delete( $this_plugin_dir, true );
|
||||
} else {
|
||||
$deleted = $wp_filesystem->delete( $plugins_dir . $plugin_file );
|
||||
}
|
||||
|
||||
if ( ! $deleted )
|
||||
if ( ! $deleted ) {
|
||||
$errors[] = $plugin_file;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Remove language files, silently.
|
||||
$plugin_slug = dirname( $plugin_file );
|
||||
if ( '.' !== $plugin_slug && ! empty( $plugin_translations[ $plugin_slug ] ) ) {
|
||||
$translations = $plugin_translations[ $plugin_slug ];
|
||||
|
||||
foreach ( $translations as $translation => $data ) {
|
||||
$wp_filesystem->delete( WP_LANG_DIR . '/plugins/' . $plugin_slug . '-' . $translation . '.po' );
|
||||
$wp_filesystem->delete( WP_LANG_DIR . '/plugins/' . $plugin_slug . '-' . $translation . '.mo' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove deleted plugins from the plugin updates list.
|
||||
|
||||
Reference in New Issue
Block a user