WordPress.org

Make WordPress Core

Ticket #7392: 7392.2.diff

File 7392.2.diff, 1.6 KB (added by adamsilverstein, 12 months 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 ] ) {