WordPress.org

Make WordPress Core

Ticket #7392: 7392.2.diff

File 7392.2.diff, 1.6 KB (added by adamsilverstein, 7 years ago)

check for duplicate data before autosaving in wp_create_post_autosave

  • wp-admin/includes/post.php

     
    12781278 * @return unknown
    12791279 */
    12801280function wp_create_post_autosave( $post_id ) {
     1281        if ( ! $post = get_post( $post_id ) )
     1282                return;
     1283
    12811284        $translated = _wp_translate_postdata( true );
    12821285        if ( is_wp_error( $translated ) )
    12831286                return $translated;
    12841287
    12851288        $post_author = get_current_user_id();
     1289        $new_data = $_POST;
    12861290
    12871291        // Store one autosave per author. If there is already an autosave, overwrite it.
    12881292        if ( $old_autosave = wp_get_post_autosave( $post_id, $post_author ) ) {
     
    12901294                $new_autosave['ID'] = $old_autosave->ID;
    12911295                $new_autosave['post_author'] = $post_author;
    12921296
     1297                // check to see if post content has changed before autosaving (filterable with wp_save_post_revision_check_for_changes)
     1298                if ( apply_filters( 'wp_save_post_revision_check_for_changes', true, $post, $new_data ) && is_array( $new_data ) ) {
     1299                        $post_has_changed = false;
     1300                        foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
     1301                                if ( normalize_whitespace( $new_data[ $field ] ) != normalize_whitespace( $post[ $field ] ) ) {
     1302                                        $post_has_changed = true;
     1303                                        break;
     1304                                }
     1305                        }
     1306                        // don't save revision if post unchanged
     1307                        if ( ! $post_has_changed )
     1308                                return;
     1309                }
     1310
    12931311                // Auto-save revisioned meta fields.
    12941312                foreach ( _wp_post_revision_meta_keys() as $meta_key ) {
    12951313                        if ( isset( $_POST[ $meta_key ] ) && get_post_meta( $new_autosave['ID'], $meta_key, true ) != $_POST[ $meta_key ] ) {