From bc2a83f44d4076d9260bc98798b224895c726988 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sat, 7 Jun 2025 17:48:44 -0600 Subject: [PATCH 1/7] update phpcs config --- phpcs.xml.dist | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/phpcs.xml.dist b/phpcs.xml.dist index a71b9bf..00386a9 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -1,6 +1,6 @@ -Custom ruleset for WP-CLI PROJECT NAME +Custom ruleset for WP Revisions CLI . @@ -21,4 +21,12 @@ + + + + + + + + \ No newline at end of file From 192a65b97425d0fe421a8c06e1fae9b5ccdac5aa Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 14:17:19 -0600 Subject: [PATCH 2/7] distibute generated revisions across timespan --- inc/class-revisions-cli.php | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/inc/class-revisions-cli.php b/inc/class-revisions-cli.php index 81fe238..cc557ee 100644 --- a/inc/class-revisions-cli.php +++ b/inc/class-revisions-cli.php @@ -368,6 +368,9 @@ function ( $i ) { * [--post_id=] * : Generate revisions for given post. * + * [--oldest_date=] + * : Oldest date for revisions. Default: 5 years ago + * * ## EXAMPLES * * wp revisions generate 10 @@ -379,8 +382,17 @@ public function generate( $args = array(), $assoc_args = array() ) { $count = WP_CLI\Utils\get_flag_value( $args, 0, 15 ); $count = absint( $count ); - $post_id = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_id', false ); - $post_type = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_type', false ); + $post_id = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_id', false ); + $post_type = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_type', false ); + $oldest_date = WP_CLI\Utils\get_flag_value( $assoc_args, 'oldest_date', '5 years ago' ); + + $oldest_date_time = strtotime( $oldest_date ); + if ( false === $oldest_date_time ) { + WP_CLI::error( 'oldest_date value invalid' ); + } + + // distribute revisions between oldest date and current time + $interval = round( ( time() - $oldest_date_time ) / $count ); global $wpdb; @@ -415,13 +427,29 @@ public function generate( $args = array(), $assoc_args = array() ) { $this->start_bulk_operation(); remove_all_filters( 'wp_revisions_to_keep' ); + remove_all_filters( 'wp_insert_post_data' ); add_filter( 'wp_save_post_revision_check_for_changes', '__return_false' ); + $inc = 0; foreach ( $posts as $post_id ) { $notify->tick(); for ( $i = 0; $i < $count; $i++ ) { + $time = $oldest_date_time + ( $interval * $i ); + + add_filter( + 'wp_insert_post_data', + function ( $data ) use ( $time ) { + $data['post_date_gmt'] = gmdate( 'Y-m-d H:i:s', $time ); + $data['post_date'] = wp_date( 'Y-m-d H:i:s', $time ); + $data['post_modified_gmt'] = gmdate( 'Y-m-d H:i:s', $time ); + $data['post_modified'] = wp_date( 'Y-m-d H:i:s', $time ); + return $data; + }, + 10 + ); + wp_save_post_revision( $post_id ); } ++$inc; From 9c56564dd1761d643b8d1807428d387156fa7508 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 14:23:14 -0600 Subject: [PATCH 3/7] add date sort to revisions list --- inc/class-revisions-cli.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/class-revisions-cli.php b/inc/class-revisions-cli.php index cc557ee..b0d68af 100644 --- a/inc/class-revisions-cli.php +++ b/inc/class-revisions-cli.php @@ -115,7 +115,7 @@ function ( $i ) { // get revisions of those IDs. $revs = $wpdb->get_results( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- IN statement - "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' AND post_parent IN ({$post__in}) ORDER BY post_parent DESC" + "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' AND post_parent IN ({$post__in}) ORDER BY post_parent, post_date, ID DESC" ); } else { $revs = []; @@ -123,7 +123,7 @@ function ( $i ) { } else { $revs = $wpdb->get_results( - "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' ORDER BY post_parent DESC" + "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' ORDER BY post_parent, post_date, ID DESC" ); } From 272cc8cb5e24ded17e3c34570fd6088a16956cf1 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 14:49:11 -0600 Subject: [PATCH 4/7] regenerate readme --- readme.md => README.md | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) rename readme.md => README.md (84%) diff --git a/readme.md b/README.md similarity index 84% rename from readme.md rename to README.md index 5bcce54..d8eb461 100644 --- a/readme.md +++ b/README.md @@ -58,7 +58,7 @@ wp revisions dump [--hard] [--yes] **OPTIONS** [--hard] - Hard delete. Slower, uses wp_delete_post_revision(). Alias to wp revisions clean -1 + Hard delete. Slower, uses wp_delete_post_revision(). Alias to `wp revisions clean -1` [--yes] Answer yes to the confirmation message. @@ -74,13 +74,16 @@ wp revisions dump [--hard] [--yes] Delete old revisions ~~~ -wp revisions clean [] [--post_type=] [--after-date=] [--before-date=] [--post_id=] [--hard] [--dry-run] +wp revisions clean [] [--filter-keep] [--post_type=] [--after-date=] [--before-date=] [--post_id=] [--hard] [--dry-run] ~~~ **OPTIONS** [] - Number of revisions to keep per post. Defaults to WP_POST_REVISIONS if it is an integer + Number of revisions to keep per post. Defaults to WP_POST_REVISIONS if it is an integer. + + [--filter-keep] + Allow `wp_revisions_to_keep` filter to override keep number. [--post_type=] Clean revisions for given post type(s). Default: any @@ -116,7 +119,7 @@ wp revisions clean [] [--post_type=] [--after-date= Generate revisions ~~~ -wp revisions generate [] [--post_type=] [--post_id=] +wp revisions generate [] [--post_type=] [--post_id=] [--oldest_date=] ~~~ **OPTIONS** @@ -130,6 +133,9 @@ wp revisions generate [] [--post_type=] [--post_id=] [--post_id=] Generate revisions for given post. + [--oldest_date=] + Oldest date for revisions. Default: 5 years ago + **EXAMPLES** wp revisions generate 10 @@ -154,11 +160,19 @@ wp revisions status ## Installing -Installing this package requires WP-CLI v2.1 or greater. Update to the latest stable release with `wp cli update`. +Installing this package requires WP-CLI v2.12 or greater. Update to the latest stable release with `wp cli update`. + +Once you've done so, you can install the latest stable version of this package with: + +```bash +wp package install trepmal/wp-revisions-cli:@stable +``` -Once you've done so, you can install this package with: +To install the latest development version of this package, use the following command instead: - wp package install git@github.com:trepmal/wp-revisions-cli.git +```bash +wp package install trepmal/wp-revisions-cli:dev-master +``` ## Contributing @@ -184,7 +198,7 @@ Once you've decided to commit the time to seeing your pull request through, [ple ## Support -Github issues aren't for general support questions, but there are other venues you can try: https://wp-cli.org/#support +GitHub issues aren't for general support questions, but there are other venues you can try: https://wp-cli.org/#support *This README.md is generated dynamically from the project's codebase using `wp scaffold package-readme` ([doc](https://github.com/wp-cli/scaffold-package-command#wp-scaffold-package-readme)). To suggest changes, please submit a pull request against the corresponding part of the codebase.* From 022cfa5cf7947c755c668b0ffd0ef2080ab33239 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 15:23:40 -0600 Subject: [PATCH 5/7] fix date params --- inc/class-revisions-cli.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/class-revisions-cli.php b/inc/class-revisions-cli.php index b0d68af..ac5c9a1 100644 --- a/inc/class-revisions-cli.php +++ b/inc/class-revisions-cli.php @@ -213,8 +213,8 @@ public function clean( $args = array(), $assoc_args = array() ) { $filter_keep = WP_CLI\Utils\get_flag_value( $assoc_args, 'filter-keep', false ); $post_type = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_type', false ); $post_id = WP_CLI\Utils\get_flag_value( $assoc_args, 'post_id', false ); - $after_date = WP_CLI\Utils\get_flag_value( $assoc_args, 'after_date', false ); - $before_date = WP_CLI\Utils\get_flag_value( $assoc_args, 'before_date', false ); + $after_date = WP_CLI\Utils\get_flag_value( $assoc_args, 'after-date', false ); + $before_date = WP_CLI\Utils\get_flag_value( $assoc_args, 'before-date', false ); $hard = WP_CLI\Utils\get_flag_value( $assoc_args, 'hard', false ); $dry_run = WP_CLI\Utils\get_flag_value( $assoc_args, 'dry-run', false ); From ba4156e175318558ad73a9097c7c1a547d4b3763 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 15:38:59 -0600 Subject: [PATCH 6/7] use wp_date(), update param description --- inc/class-revisions-cli.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/inc/class-revisions-cli.php b/inc/class-revisions-cli.php index ac5c9a1..fc0f8dc 100644 --- a/inc/class-revisions-cli.php +++ b/inc/class-revisions-cli.php @@ -176,10 +176,10 @@ public function status( $args = array(), $assoc_args = array() ) { * : Clean revisions for given post type(s). Default: any * * [--after-date=] - * : Clean revisions on posts published on or after this date. Default: none. + * : Clean revisions on posts published on or after this date (GMT). Default: none. * * [--before-date=] - * : Clean revisions on posts published on or before this date. Default: none. + * : Clean revisions on posts published before this date (GMT). Default: none. * * [--post_id=] * : Clean revisions for given post. @@ -247,8 +247,9 @@ function ( $i ) { $strto_aft = $after_date ? strtotime( $after_date ) : false; $strto_bef = $before_date ? strtotime( $before_date ) : false; - $after_ymd = $strto_aft ? date( 'Y-m-d', $strto_aft ) : false; - $before_ymd = $strto_bef ? date( 'Y-m-d', $strto_bef ) : false; + // use wp_date to get local time, since we query against post_date column + $after_ymd = $strto_aft ? wp_date( 'Y-m-d', $strto_aft ) : false; + $before_ymd = $strto_bef ? wp_date( 'Y-m-d', $strto_bef ) : false; if ( $after_ymd && $before_ymd ) { $where .= $wpdb->prepare( ' AND (post_date < %s AND post_date > %s)', $before_ymd, $after_ymd ); From 181dcaaaacfd1339c13e2935d2b6585147d81039 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Sun, 8 Jun 2025 15:39:24 -0600 Subject: [PATCH 7/7] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d8eb461..d54aebb 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,10 @@ wp revisions clean [] [--filter-keep] [--post_type=] [--after-d Clean revisions for given post type(s). Default: any [--after-date=] - Clean revisions on posts published on or after this date. Default: none. + Clean revisions on posts published on or after this date (GMT). Default: none. [--before-date=] - Clean revisions on posts published on or before this date. Default: none. + Clean revisions on posts published before this date (GMT). Default: none. [--post_id=] Clean revisions for given post.