WordPress.org

Make WordPress Core

Ticket #20564: 20564-8.patch

File 20564-8.patch, 6.3 KB (added by azaozz, 16 months ago)
  • wp-admin/includes/post.php

     
    12791279                $new_autosave['ID'] = $old_autosave->ID; 
    12801280                $new_autosave['post_author'] = $post_author; 
    12811281 
    1282                 // Auto-save revisioned meta fields too. 
     1282                // Auto-save revisioned meta fields. 
    12831283                foreach ( _wp_post_revision_meta_keys() as $meta_key ) { 
    1284                         if ( ! isset( $_POST[ $meta_key ] ) ) 
    1285                                 continue; 
     1284                        if ( isset( $_POST[ $meta_key ] ) && get_post_meta( $new_autosave['ID'], $meta_key, true ) != $_POST[ $meta_key ] ) { 
     1285                                // Use the underlying delete_metadata and add_metadata vs delete_post_meta 
     1286                                // and add_post_meta to make sure we're working with the actual revision meta. 
     1287                                delete_metadata( 'post', $new_autosave['ID'], $meta_key ); 
    12861288 
    1287                         // Use the underlying delete_metadata and add_metadata vs delete_post_meta 
    1288                         // and add_post_meta to make sure we're working with the actual revision meta. 
    1289                         delete_metadata( 'post', $new_autosave['ID'], $meta_key ); 
    1290                         add_metadata( 'post', $new_autosave['ID'], $meta_key, $_POST[ $meta_key ] ); 
     1289                                if ( ! empty( $_POST[ $meta_key ] ) ) 
     1290                                        add_metadata( 'post', $new_autosave['ID'], $meta_key, $_POST[ $meta_key ] ); 
     1291                        } 
    12911292                } 
    12921293 
     1294                // Save the post format if different 
     1295                if ( isset( $_POST['post_format'] ) && get_post_meta( $new_autosave['ID'], '_revision_post_format', true ) != $_POST['post_format'] ) { 
     1296                        delete_metadata( 'post', $new_autosave['ID'], '_revision_post_format' ); 
     1297 
     1298                        if ( ! empty( $_POST['post_format'] ) ) 
     1299                                update_metadata( 'post', $new_autosave['ID'], '_revision_post_format', $_POST['post_format'] ); 
     1300                } 
     1301 
    12931302                return wp_update_post( $new_autosave ); 
    12941303        } 
    12951304 
  • wp-includes/js/autosave.js

     
    305305(function($){ 
    306306// Returns the data for saving in both localStorage and autosaves to the server 
    307307wp.autosave.getPostData = function() { 
    308         var ed = typeof tinymce != 'undefined' ? tinymce.activeEditor : null, post_name, parent_id, cats = [], 
     308        var ed = typeof tinymce != 'undefined' ? tinymce.activeEditor : null, post_name, parent_id, post_format, cats = [], 
    309309                data = { 
    310310                        action: 'autosave', 
    311311                        autosave: true, 
     
    364364        if ( $('#auto_draft').val() == '1' ) 
    365365                data['auto_draft'] = '1'; 
    366366 
     367        post_format = $('#post_format').val() || ''; 
     368        data['post_format'] = post_format == 'standard' ? '' : post_format; 
     369 
     370        $('.post-formats-fields').find('input[name^="_wp_format_"], textarea[name^="_wp_format_"]').each( function(i, field) { 
     371                data[ field.name ] = field.value || ''; 
     372        }); 
     373 
    367374        return data; 
    368375} 
    369376 
  • wp-includes/revision.php

     
    134134 
    135135                        // Check whether revisioned meta fields have changed. 
    136136                        foreach ( _wp_post_revision_meta_keys() as $meta_key ) { 
    137                                 if ( get_post_meta( $post->ID, $meta_key ) != get_post_meta( $last_revision->ID, $meta_key ) ) { 
     137                                if ( get_post_meta( $post->ID, $meta_key, true ) != get_post_meta( $last_revision->ID, $meta_key, true ) ) { 
    138138                                        $post_has_changed = true; 
    139139                                        break; 
    140140                                } 
    141141                        } 
    142142 
     143                        // Check whether the post format has changed 
     144                        if ( get_post_format( $post->ID ) != get_post_meta( $last_revision->ID, '_revision_post_format', true ) ) 
     145                                $post_has_changed = true; 
     146 
    143147                        //don't save revision if post unchanged 
    144148                        if( ! $post_has_changed ) 
    145149                                return; 
     
    280284 
    281285        // Save revisioned meta fields. 
    282286        foreach ( _wp_post_revision_meta_keys() as $meta_key ) { 
    283                 $meta_values = get_post_meta( $post_id, $meta_key ); 
    284                 if ( false === $meta_values ) 
     287                $meta_value = get_post_meta( $post_id, $meta_key, true ); 
     288                if ( empty( $meta_value ) ) 
    285289                        continue; 
    286290 
    287291                // Use the underlying add_metadata vs add_post_meta to make sure 
    288292                // metadata is added to the revision post and not its parent. 
    289                 foreach ( $meta_values as $meta_value ) 
    290                         add_metadata( 'post', $revision_id, $meta_key, $meta_value ); 
     293                add_metadata( 'post', $revision_id, $meta_key, wp_slash( $meta_value ) ); 
    291294        } 
    292295 
     296        // Save the post format 
     297        if ( $post_format = get_post_format( $post_id ) ) 
     298                add_metadata( 'post', $revision_id, '_revision_post_format', $post_format ); 
     299 
    293300        return $revision_id; 
    294301} 
    295302 
     
    366373 
    367374        // Restore revisioned meta fields. 
    368375        foreach ( _wp_post_revision_meta_keys() as $meta_key ) { 
    369                 delete_post_meta( $update['ID'], $meta_key ); 
    370                 $meta_values = get_post_meta( $revision['ID'], $meta_key ); 
    371                 if ( false === $meta_values ) 
    372                         continue; 
    373  
    374                 foreach ( $meta_values as $meta_value ) 
    375                         add_post_meta( $update['ID'], $meta_key, $meta_value ); 
     376                $meta_value = get_post_meta( $revision['ID'], $meta_key, true ); 
     377                if ( empty( $meta_value ) ) 
     378                        $meta_value = ''; 
     379                // Add slashes to data pulled from the db 
     380                update_post_meta( $update['ID'], $meta_key, wp_slash( $meta_value ) ); 
    376381        } 
    377382 
     383        // Restore post format 
     384        set_post_format( $update['ID'], get_post_meta( $revision['ID'], '_revision_post_format', true ) ); 
     385 
    378386        $post_id = wp_update_post( $update ); 
    379387        if ( is_wp_error( $post_id ) ) 
    380388                return $post_id; 
     
    505513        $post->post_excerpt = $preview->post_excerpt; 
    506514 
    507515        add_filter( 'get_post_metadata', '_wp_preview_meta_filter', 10, 4 ); 
     516        add_filter( 'get_the_terms', '_wp_preview_terms_filter', 10, 3 ); 
    508517 
    509518        return $post; 
    510519} 
     
    541550        return get_post_meta( $preview->ID, $meta_key, $single ); 
    542551} 
    543552 
     553/** 
     554 * Filters terms lookup to get the post format saved with the preview revision. 
     555 * 
     556 * @since 2.6 
     557 * @access private 
     558 */ 
     559function _wp_preview_terms_filter( $terms, $post_id, $taxonomy ) { 
     560        $post = get_post(); 
     561 
     562        if ( $post->ID != $post_id || 'post_format' != $taxonomy || 'revision' == $post->post_type ) 
     563                return $terms; 
     564 
     565        if ( ! $preview = wp_get_post_autosave( $post->ID ) ) 
     566                return $terms; 
     567 
     568        $post_format = get_post_meta( $preview->ID, '_revision_post_format', true ); 
     569        $term = get_term_by( 'slug', 'post-format-' . sanitize_key( $post_format ), 'post_format' ); 
     570        if ( $term ) 
     571                $terms = array( $term ); 
     572 
     573        return $terms; 
     574} 
     575 
    544576function _wp_get_post_revision_version( $revision ) { 
    545577        if ( is_object( $revision ) ) 
    546578                $revision = get_object_vars( $revision );