delete_theme( string $stylesheet, string $redirect = '' ): bool|null|WP_Error

Removes a theme.

Parameters

$stylesheetstringrequired
Stylesheet of the theme to delete.
$redirectstringoptional
Redirect to page when complete.

Default:''

Return

bool|null|WP_Error True on success, false if $stylesheet is empty, WP_Error on failure.
Null if filesystem credentials are required to proceed.

Source

function delete_theme( $stylesheet, $redirect = '' ) {	global $wp_filesystem;	if ( empty( $stylesheet ) ) {	return false;	}	if ( empty( $redirect ) ) {	$redirect = wp_nonce_url( 'themes.php?action=delete&stylesheet=' . urlencode( $stylesheet ), 'delete-theme_' . $stylesheet );	}	ob_start();	$credentials = request_filesystem_credentials( $redirect );	$data = ob_get_clean();	if ( false === $credentials ) {	if ( ! empty( $data ) ) {	require_once ABSPATH . 'wp-admin/admin-header.php';	echo $data;	require_once ABSPATH . 'wp-admin/admin-footer.php';	exit;	}	return;	}	if ( ! WP_Filesystem( $credentials ) ) {	ob_start();	// Failed to connect. Error and request again.	request_filesystem_credentials( $redirect, '', true );	$data = ob_get_clean();	if ( ! empty( $data ) ) {	require_once ABSPATH . 'wp-admin/admin-header.php';	echo $data;	require_once 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->has_errors() ) {	return new WP_Error( 'fs_error', __( 'Filesystem error.' ), $wp_filesystem->errors );	}	// Get the base theme folder.	$themes_dir = $wp_filesystem->wp_themes_dir();	if ( empty( $themes_dir ) ) {	return new WP_Error( 'fs_no_themes_dir', __( 'Unable to locate WordPress theme directory.' ) );	}	/** * Fires immediately before a theme deletion attempt. * * @since 5.8.0 * * @param string $stylesheet Stylesheet of the theme to delete. */	do_action( 'delete_theme', $stylesheet );	$theme = wp_get_theme( $stylesheet );	$themes_dir = trailingslashit( $themes_dir );	$theme_dir = trailingslashit( $themes_dir . $stylesheet );	$deleted = $wp_filesystem->delete( $theme_dir, true );	/** * Fires immediately after a theme deletion attempt. * * @since 5.8.0 * * @param string $stylesheet Stylesheet of the theme to delete. * @param bool $deleted Whether the theme deletion was successful. */	do_action( 'deleted_theme', $stylesheet, $deleted );	if ( ! $deleted ) {	return new WP_Error(	'could_not_remove_theme',	/* translators: %s: Theme name. */	sprintf( __( 'Could not fully remove the theme %s.' ), $stylesheet )	);	}	$theme_translations = wp_get_installed_translations( 'themes' );	// Remove language files, silently.	if ( ! empty( $theme_translations[ $stylesheet ] ) ) {	$translations = $theme_translations[ $stylesheet ];	foreach ( $translations as $translation => $data ) {	$wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.po' );	$wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.mo' );	$wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.l10n.php' );	$json_translation_files = glob( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '-*.json' );	if ( $json_translation_files ) {	array_map( array( $wp_filesystem, 'delete' ), $json_translation_files );	}	}	}	// Remove the theme from allowed themes on the network.	if ( is_multisite() ) {	WP_Theme::network_disable_theme( $stylesheet );	}	// Clear theme caches.	$theme->cache_delete();	// Force refresh of theme update information.	delete_site_transient( 'update_themes' );	return true; } 

Hooks

do_action( ‘deleted_theme’, string $stylesheet, bool $deleted )

Fires immediately after a theme deletion attempt.

do_action( ‘delete_theme’, string $stylesheet )

Fires immediately before a theme deletion attempt.

Changelog

VersionDescription
2.8.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.