WordPress.org

Make WordPress Core

Ticket #20564: 20564.7.diff

File 20564.7.diff, 4.0 KB (added by kovshenin, 8 years ago)
  • 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, $meta_value );
    291294        }
    292295
     296        // Save the post format
     297        add_metadata( 'post', $revision_id, '_revision_post_format', get_post_format( $post_id ) );
     298
    293299        return $revision_id;
    294300}
    295301
     
    367373        // Restore revisioned meta fields.
    368374        foreach ( _wp_post_revision_meta_keys() as $meta_key ) {
    369375                delete_post_meta( $update['ID'], $meta_key );
    370                 $meta_values = get_post_meta( $revision['ID'], $meta_key );
    371                 if ( false === $meta_values )
     376                $meta_value = get_post_meta( $revision['ID'], $meta_key, true );
     377                if ( empty( $meta_value ) )
    372378                        continue;
    373379
    374                 foreach ( $meta_values as $meta_value )
    375                         add_post_meta( $update['ID'], $meta_key, $meta_value );
     380                add_post_meta( $update['ID'], $meta_key, $meta_value );
    376381        }
    377382
     383        // Restore post format
     384        $post_format = get_post_meta( $revision['ID'], '_revision_post_format', true );
     385        set_post_format( $update['ID'], $post_format );
     386
    378387        $post_id = wp_update_post( $update );
    379388        if ( is_wp_error( $post_id ) )
    380389                return $post_id;
     
    505514        $post->post_excerpt = $preview->post_excerpt;
    506515
    507516        add_filter( 'get_post_metadata', '_wp_preview_meta_filter', 10, 4 );
     517        add_filter( 'get_the_terms', '_wp_preview_terms_filter', 10, 3 );
    508518
    509519        return $post;
    510520}
     
    541551        return get_post_meta( $preview->ID, $meta_key, $single );
    542552}
    543553
     554/**
     555 * Filters terms lookup to get the post format saved with the preview revision.
     556 *
     557 * @since 2.6
     558 * @access private
     559 */
     560function _wp_preview_terms_filter( $terms, $post_id, $taxonomy ) {
     561        $post = get_post();
     562
     563        if ( $post->ID != $post_id || 'post_format' != $taxonomy || 'revision' == $post->post_type )
     564                return $terms;
     565
     566        $preview = wp_get_post_autosave( $post->ID );
     567        if ( ! is_object( $preview ) )
     568                return $terms;
     569
     570        $post_format = get_post_meta( $preview->ID, '_revision_post_format', true );
     571        $term = get_term_by( 'slug', 'post-format-' . sanitize_key( $post_format ), 'post_format' );
     572        if ( $term )
     573                $terms = array( $term );
     574
     575        return $terms;
     576}
     577
    544578function _wp_get_post_revision_version( $revision ) {
    545579        if ( is_object( $revision ) )
    546580                $revision = get_object_vars( $revision );
  • wp-admin/includes/post.php

     
    12901290                        add_metadata( 'post', $new_autosave['ID'], $meta_key, $_POST[ $meta_key ] );
    12911291                }
    12921292
     1293                // Save the post format
     1294                if ( isset( $_POST['post_format'] ) )
     1295                        update_metadata( 'post', $new_autosave['ID'], '_revision_post_format', $_POST['post_format'] );
     1296
    12931297                return wp_update_post( $new_autosave );
    12941298        }
    12951299