PluginProbe ʕ •ᴥ•ʔ
Yoast Duplicate Post / 4.6
Yoast Duplicate Post v4.6
trunk 0.3 0.4 0.5 0.6 0.6.1 1.0 1.1 1.1.1 1.1.2 2.0 2.0.1 2.0.2 2.1 2.1.1 2.2 2.3 2.4 2.4.1 2.5 2.6 3.0 3.0.1 3.0.2 3.0.3 3.1 3.1.1 3.1.2 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 4.0 4.0.1 4.0.2 4.1 4.1.1 4.1.2 4.2 4.3 4.4 4.5 4.6
duplicate-post / src / revisions-migrator.php
duplicate-post / src Last commit date
admin 3 months ago handlers 3 months ago ui 3 months ago watchers 3 months ago duplicate-post.php 4 years ago permissions-helper.php 4 years ago post-duplicator.php 3 months ago post-republisher.php 3 months ago revisions-migrator.php 4 years ago utils.php 3 months ago
revisions-migrator.php
68 lines
1 <?php
2
3 namespace Yoast\WP\Duplicate_Post;
4
5 /**
6 * Duplicate Post class to migrate revisions from the Rewrite & Republish copy to the original post.
7 *
8 * @since 4.0
9 */
10 class Revisions_Migrator {
11
12 /**
13 * Adds hooks to integrate with the Post Republisher class.
14 *
15 * @return void
16 */
17 public function register_hooks() {
18 \add_action( 'duplicate_post_after_rewriting', [ $this, 'migrate_revisions' ], 10, 2 );
19 }
20
21 /**
22 * Updates the revisions of the Rewrite & Republish copy to make them revisions of the original.
23 *
24 * It mimics the behaviour of wp_save_post_revision() in wp-includes/revision.php
25 * by deleting the revisions (except autosaves) exceeding the maximum allowed number.
26 *
27 * @param int $copy_id The copy's ID.
28 * @param int $original_id The post's ID.
29 *
30 * @return void
31 */
32 public function migrate_revisions( $copy_id, $original_id ) {
33 $copy = \get_post( $copy_id );
34 $original_post = \get_post( $original_id );
35
36 if ( \is_null( $copy ) || \is_null( $original_post ) || ! \wp_revisions_enabled( $original_post ) ) {
37 return;
38 }
39
40 $copy_revisions = \wp_get_post_revisions( $copy );
41 foreach ( $copy_revisions as $revision ) {
42 $revision->post_parent = $original_post->ID;
43 $revision->post_name = "$original_post->ID-revision-v1";
44 \wp_update_post( $revision );
45 }
46
47 $revisions_to_keep = \wp_revisions_to_keep( $original_post );
48 if ( $revisions_to_keep < 0 ) {
49 return;
50 }
51
52 $revisions = \wp_get_post_revisions( $original_post, [ 'order' => 'ASC' ] );
53 $delete = ( \count( $revisions ) - $revisions_to_keep );
54 if ( $delete < 1 ) {
55 return;
56 }
57
58 $revisions = \array_slice( $revisions, 0, $delete );
59
60 for ( $i = 0; isset( $revisions[ $i ] ); $i++ ) {
61 if ( \strpos( $revisions[ $i ]->post_name, 'autosave' ) !== false ) {
62 continue;
63 }
64 \wp_delete_post_revision( $revisions[ $i ]->ID );
65 }
66 }
67 }
68