| 1 |
<?php |
| 2 |
/** |
| 3 |
* WP Reset |
| 4 |
* https://wpreset.com/ |
| 5 |
* (c) WebFactory Ltd, 2017-2018 |
| 6 |
*/ |
| 7 |
|
| 8 |
|
| 9 |
// include only file |
| 10 |
if (!defined('ABSPATH')) { |
| 11 |
wp_die(__('Do not open this file directly.', 'wp-error')); |
| 12 |
} |
| 13 |
|
| 14 |
|
| 15 |
/** |
| 16 |
* Resets the site to the default values without modifying any files. |
| 17 |
*/ |
| 18 |
class WP_Reset_CLI extends WP_CLI_Command { |
| 19 |
|
| 20 |
/** |
| 21 |
* Reset the site database to default values. No files are modified. |
| 22 |
* |
| 23 |
* ## OPTIONS |
| 24 |
* |
| 25 |
* [--reactivate-theme] |
| 26 |
* : Reactivate currently active theme after reset. |
| 27 |
* |
| 28 |
* [--reactivate-plugins] |
| 29 |
* : Reactivate all currently active plugins after reset. |
| 30 |
* |
| 31 |
* [--deactivate-wp-reset] |
| 32 |
* : Deactivate WP Reset plugin after reset. By default it will stay active after reset. |
| 33 |
* |
| 34 |
* [--yes] |
| 35 |
* : Answer yes to the confirmation message. |
| 36 |
* |
| 37 |
* ## EXAMPLES |
| 38 |
* |
| 39 |
* $ wp reset reset --yes |
| 40 |
* Success: Database has been reset. |
| 41 |
* |
| 42 |
* @when after_wp_load |
| 43 |
*/ |
| 44 |
function reset( $args, $assoc_args ) { |
| 45 |
WP_CLI::confirm( 'Are you sure you want to reset the site? There is NO UNDO!', $assoc_args ); |
| 46 |
|
| 47 |
global $wp_reset; |
| 48 |
$params = array(); |
| 49 |
|
| 50 |
if ( !empty( $assoc_args['reactivate-theme'] ) ) { |
| 51 |
$params['reactivate_theme'] = true; |
| 52 |
} |
| 53 |
if ( !empty( $assoc_args['disable-wp-reset'] ) ) { |
| 54 |
$params['reactivate_wpreset'] = false; |
| 55 |
} else { |
| 56 |
$params['reactivate_wpreset'] = true; |
| 57 |
} |
| 58 |
if ( !empty( $assoc_args['reactivate-plugins'] ) ) { |
| 59 |
$params['reactivate_plugins'] = true; |
| 60 |
} |
| 61 |
|
| 62 |
$result = $wp_reset->do_reinstall( $params ); |
| 63 |
if (is_wp_error($result)) { |
| 64 |
WP_CLI::error( $result->get_error_message ); |
| 65 |
} else { |
| 66 |
WP_CLI::success( 'Database has been reset.' ); |
| 67 |
} |
| 68 |
} // reset |
| 69 |
|
| 70 |
|
| 71 |
/** |
| 72 |
* Display WP Reset version. |
| 73 |
* |
| 74 |
* @when after_wp_load |
| 75 |
*/ |
| 76 |
function version( $args, $assoc_args ) { |
| 77 |
global $wp_reset; |
| 78 |
|
| 79 |
WP_CLI::line( 'WP Reset v' . $wp_reset->version ); |
| 80 |
} // version |
| 81 |
|
| 82 |
|
| 83 |
/** |
| 84 |
* Delete selected WordPress objects. |
| 85 |
* |
| 86 |
* ## OPTIONS |
| 87 |
* |
| 88 |
* <plugins|themes|transients|uploads> |
| 89 |
* : WP objects to delete. |
| 90 |
* |
| 91 |
* [--yes] |
| 92 |
* : Answer yes to the confirmation message. |
| 93 |
* |
| 94 |
* ## EXAMPLES |
| 95 |
* |
| 96 |
* $ wp reset delete themes --yes |
| 97 |
* Success: 3 themes have been deleted. |
| 98 |
* |
| 99 |
* @when after_wp_load |
| 100 |
*/ |
| 101 |
function delete( $args, $assoc_args ) { |
| 102 |
global $wp_reset; |
| 103 |
|
| 104 |
if ( empty( $args[0] ) ) { |
| 105 |
WP_CLI::error( 'Please choose a subcommand: plugins, themes, transients or uploads.' ); |
| 106 |
return; |
| 107 |
} elseif ( false == in_array( $args[0], array( 'themes', 'plugins', 'transients', 'uploads' ) ) ) { |
| 108 |
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients or uploads.' ); |
| 109 |
} else { |
| 110 |
$subcommand = $args[0]; |
| 111 |
} |
| 112 |
|
| 113 |
switch ($subcommand) { |
| 114 |
case 'themes': |
| 115 |
WP_CLI::confirm( 'Are you sure you want to delete all themes?', $assoc_args ); |
| 116 |
$cnt = $wp_reset->do_delete_themes( false ); |
| 117 |
WP_CLI::success( $cnt . ' themes have been deleted.' ); |
| 118 |
break; |
| 119 |
case 'plugins': |
| 120 |
WP_CLI::confirm( 'Are you sure you want to delete all plugins?', $assoc_args ); |
| 121 |
$cnt = $wp_reset->do_delete_plugins( true, false ); |
| 122 |
WP_CLI::success( $cnt . ' plugins have been deleted.' ); |
| 123 |
break; |
| 124 |
case 'transients': |
| 125 |
WP_CLI::confirm( 'Are you sure you want to delete all transients?', $assoc_args ); |
| 126 |
$cnt = $wp_reset->do_delete_transients(); |
| 127 |
WP_CLI::success( $cnt . ' transient database entries have been deleted.' ); |
| 128 |
break; |
| 129 |
case 'uploads': |
| 130 |
WP_CLI::confirm( 'Are you sure you want to delete all files & folders in /uploads/ folder?', $assoc_args ); |
| 131 |
$cnt = $wp_reset->do_delete_uploads(); |
| 132 |
WP_CLI::success( $cnt . ' files & folders have been deleted.' ); |
| 133 |
break; |
| 134 |
default: |
| 135 |
// should never come to this but can't hurt |
| 136 |
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients or uploads.' ); |
| 137 |
return; |
| 138 |
} |
| 139 |
} // delete |
| 140 |
} // WP_Reset_CLI |
| 141 |
|
| 142 |
WP_CLI::add_command( 'reset', 'WP_Reset_CLI' ); |
| 143 |
|