delete_theme() – Remove a theme

You appear to be a bot. Output may be restricted

Description

Removes a theme.

Usage

$bool|null|WP_Error = delete_theme( $stylesheet, $redirect );

Parameters

$stylesheet
( string ) required – Stylesheet of the theme to delete.
$redirect
( string ) optional – Redirect to page when complete.

Returns

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

File name: wordpress/wp-admin/includes/theme.php
Lines:

1 to 100 of 112
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 plugin 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 );

  $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' );

      $json_translation_files = glob( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '-*.json' );
      if ( $json_translation_files ) {
        array_map( array( $wp_filesystem, 'delete' ), $json_translation_files );
      }
    }
 

 View on GitHub View on Trac