From 32d38fc0807b5110367ca8b593951af3213818c9 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Wed, 29 Oct 2014 19:01:15 +0000 Subject: [PATCH] Introduce some actions and filters which aid plugins in revisioning post meta. * `wp_save_post_revision_post_has_changed` filter which can be used to determine if a post has been changed, and therefore if a revision should be created for a post. * `wp_get_revision_ui_diff` filter which can be used to filter the fields displayed in the post revision diff UI. * `wp_creating_autosave` action which is fired just before an autosave is created. See #20564. Props mattheu, adamsilverstein. git-svn-id: https://develop.svn.wordpress.org/trunk@30091 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 9 +++++++++ src/wp-admin/includes/revision.php | 13 ++++++++++++- src/wp-includes/revision.php | 19 ++++++++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 4cfad6ed87..486282ac2a 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -1541,6 +1541,15 @@ function wp_create_post_autosave( $post_data ) { return 0; } + /** + * Fires before an autosave is stored. + * + * @since 4.1.0 + * + * @param array $new_autosave Post array - the autosave that is about to be saved. + */ + do_action( 'wp_creating_autosave', $new_autosave ); + return wp_update_post( $new_autosave ); } diff --git a/src/wp-admin/includes/revision.php b/src/wp-admin/includes/revision.php index 151cd64454..4e20f2d608 100644 --- a/src/wp-admin/includes/revision.php +++ b/src/wp-admin/includes/revision.php @@ -92,7 +92,18 @@ function wp_get_revision_ui_diff( $post, $compare_from, $compare_to ) { ); } } - return $return; + + /** + * Filter the fields displayed in the post revision diff UI. + * + * @since 4.1.0 + * + * @param array $return Revision UI fields. Each item is an array of id, name and diff. + * @param WP_Post $compare_from The revision post to compare from. + * @param WP_Post $compare_to The revision post to compare to. + */ + return apply_filters( 'wp_get_revision_ui_diff', $return, $compare_from, $compare_to ); + } /** diff --git a/src/wp-includes/revision.php b/src/wp-includes/revision.php index 45e436f567..68ad112683 100644 --- a/src/wp-includes/revision.php +++ b/src/wp-includes/revision.php @@ -133,9 +133,26 @@ function wp_save_post_revision( $post_id ) { break; } } + + /** + * Filter whether a post has changed. + * + * By default a revision is saved only if one of the revisioned fields has changed. + * This filter allows for additional checks to determine if there were changes. + * + * @since 4.1.0 + * + * @param bool $post_has_changed Whether the post has changed. + * @param WP_Post $last_revision The the last revision post object. + * @param WP_Post $post The post object. + * + */ + $post_has_changed = (bool) apply_filters( 'wp_save_post_revision_post_has_changed', $post_has_changed, $last_revision, $post ); + //don't save revision if post unchanged - if( ! $post_has_changed ) + if( ! $post_has_changed ) { return; + } } }