delete_plugins( array $plugins, string $deprecated = '' )
Remove directory and files of a plugin for a list of plugins.
描述
参数
- $plugins
-
(array)
(Required)
List of plugins to delete. - $deprecated
-
(string)
(Optional)
Deprecated.Default value: ”
返回值
(bool|null|WP_Error) True on success, false is $plugins is empty, WP_Error on failure. Null if filesystem credentials are required to proceed.
源代码
File: wp-admin/includes/plugin.php
function delete_plugins( $plugins, $deprecated = '' ) {
global $wp_filesystem;
if ( empty($plugins) )
return false;
$checked = array();
foreach ( $plugins as $plugin )
$checked[] = 'checked[]=' . $plugin;
$url = wp_nonce_url('plugins.php?action=delete-selected&verify-delete=1&' . implode('&', $checked), 'bulk-plugins');
ob_start();
$credentials = request_filesystem_credentials( $url );
$data = ob_get_clean();
if ( false === $credentials ) {
if ( ! empty($data) ){
include_once( ABSPATH . 'wp-admin/admin-header.php');
echo $data;
include( ABSPATH . 'wp-admin/admin-footer.php');
exit;
}
return;
}
if ( ! WP_Filesystem( $credentials ) ) {
ob_start();
request_filesystem_credentials( $url, '', true ); // Failed to connect, Error and request again.
$data = ob_get_clean();
if ( ! empty($data) ){
include_once( ABSPATH . 'wp-admin/admin-header.php');
echo $data;
include( ABSPATH . 'wp-admin/admin-footer.php');
exit;
}
return;
}
if ( ! is_object($wp_filesystem) )
return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
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.
$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.' ) );
}
$plugins_dir = trailingslashit( $plugins_dir );
$plugin_translations = wp_get_installed_translations( 'plugins' );
$errors = array();
foreach ( $plugins as $plugin_file ) {
// Run Uninstall hook.
if ( is_uninstallable_plugin( $plugin_file ) ) {
uninstall_plugin($plugin_file);
}
/**
* Fires immediately before a plugin deletion attempt.
*
* @since 4.4.0
*
* @param string $plugin_file Plugin file name.
*/
do_action( 'delete_plugin', $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 );
}
/**
* Fires immediately after a plugin deletion attempt.
*
* @since 4.4.0
*
* @param string $plugin_file Plugin file name.
* @param bool $deleted Whether the plugin deletion was successful.
*/
do_action( 'deleted_plugin', $plugin_file, $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.
if ( $current = get_site_transient('update_plugins') ) {
// Don't remove the plugins that weren't deleted.
$deleted = array_diff( $plugins, $errors );
foreach ( $deleted as $plugin_file ) {
unset( $current->response[ $plugin_file ] );
}
set_site_transient( 'update_plugins', $current );
}
if ( ! empty($errors) )
return new WP_Error('could_not_remove_plugin', sprintf(__('Could not fully remove the plugin(s) %s.'), implode(', ', $errors)) );
return true;
}
更新日志
Version | 描述 |
---|---|
2.6.0 | Introduced. |
相关函数
Uses
-
wp-admin/includes/plugin.php:
delete_plugin -
wp-admin/includes/plugin.php:
deleted_plugin -
wp-admin/includes/plugin.php:
is_uninstallable_plugin() -
wp-admin/includes/plugin.php:
uninstall_plugin() -
wp-admin/includes/file.php:
request_filesystem_credentials() -
wp-admin/includes/file.php:
WP_Filesystem() -
wp-includes/l10n.php:
wp_get_installed_translations() -
wp-includes/l10n.php:
__() -
wp-includes/formatting.php:
trailingslashit() -
wp-includes/functions.php:
wp_nonce_url() -
wp-includes/plugin.php:
do_action() -
wp-includes/option.php:
set_site_transient() -
wp-includes/option.php:
get_site_transient() -
wp-includes/load.php:
is_wp_error() -
wp-includes/class-wp-error.php:
WP_Error::__construct()
Show 10 more uses
Hide more uses
Used By
-
wp-admin/includes/ajax-actions.php:
wp_ajax_delete_plugin()
User Contributed Notes
你可能对这些文章感兴趣:
- wordpress函数gd_edit_image_support()用法示例
- wordpress函数gallery_shortcode()用法示例
- wordpress函数funky_javascript_callback()用法示例
- wordpress函数funky_javascript_fix()用法示例
- wordpress函数format_to_edit()用法示例
- wordpress函数format_to_post()用法示例
- wordpress函数form_option()用法示例
- wordpress函数force_ssl_login()用法示例
- wordpress函数format_code_lang()用法示例
- wordpress函数format_for_editor()用法示例
- wordpress函数force_ssl_content()用法示例
- wordpress函数flush_rewrite_rules()用法示例
- wordpress函数force_balance_tags()用法示例
- wordpress函数force_ssl_admin()用法示例
如有疑问,请前往问答中心反馈!
反馈