Esempio n. 1
0
/**
 * Remove a theme
 *
 * @since 2.8.0
 *
 * @global WP_Filesystem_Base $wp_filesystem Subclass
 *
 * @param string $stylesheet Stylesheet of the theme to delete
 * @param string $redirect Redirect to page when complete.
 * @return void|bool|WP_Error When void, echoes content.
 */
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)) {
            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($redirect, '', 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.
    $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.'));
    }
    $themes_dir = trailingslashit($themes_dir);
    $theme_dir = trailingslashit($themes_dir . $stylesheet);
    $deleted = $wp_filesystem->delete($theme_dir, true);
    if (!$deleted) {
        return new WP_Error('could_not_remove_theme', 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');
        }
    }
    // Remove the theme from allowed themes on the network.
    if (is_multisite()) {
        WP_Theme::network_disable_theme($stylesheet);
    }
    // Force refresh of theme update information.
    delete_site_transient('update_themes');
    return true;
}
 /**
  * Disable multiple themes on a network.
  *
  * @ticket 30594
  */
 function test_network_disable_multiple_themes()
 {
     if (!is_multisite()) {
         $this->markTestSkipped('This test requires multisite');
     }
     $current_allowed_themes = get_site_option('allowedthemes');
     $allowed_themes = array('existing-4' => true, 'existing-5' => true, 'existing-6' => true);
     update_site_option('allowedthemes', $allowed_themes);
     $disable_themes = array('existing-4', 'existing-5');
     WP_Theme::network_disable_theme($disable_themes);
     $new_allowed_themes = get_site_option('allowedthemes');
     update_site_option('allowedthemes', $current_allowed_themes);
     // reset previous value.
     unset($allowed_themes['existing-4']);
     unset($allowed_themes['existing-5']);
     $this->assertEqualSetsWithIndex($allowed_themes, $new_allowed_themes);
 }
     $themes = isset($_POST['checked']) ? (array) $_POST['checked'] : array();
     if (empty($themes)) {
         wp_safe_redirect(add_query_arg('error', 'none', $referer));
         exit;
     }
     WP_Theme::network_enable_theme((array) $themes);
     wp_safe_redirect(add_query_arg('enabled', count($themes), $referer));
     exit;
 case 'disable-selected':
     check_admin_referer('bulk-themes');
     $themes = isset($_POST['checked']) ? (array) $_POST['checked'] : array();
     if (empty($themes)) {
         wp_safe_redirect(add_query_arg('error', 'none', $referer));
         exit;
     }
     WP_Theme::network_disable_theme((array) $themes);
     wp_safe_redirect(add_query_arg('disabled', count($themes), $referer));
     exit;
 case 'update-selected':
     check_admin_referer('bulk-themes');
     if (isset($_GET['themes'])) {
         $themes = explode(',', $_GET['themes']);
     } elseif (isset($_POST['checked'])) {
         $themes = (array) $_POST['checked'];
     } else {
         $themes = array();
     }
     $title = __('Update Themes');
     $parent_file = 'themes.php';
     require_once ABSPATH . 'wp-admin/admin-header.php';
     echo '<div class="wrap">';