WordPress.org

Make WordPress Core

Ticket #20564: 20564.3.diff

File 20564.3.diff, 5.5 KB (added by adamsilverstein, 13 months ago)

update against current

  • wp-includes/post.php

     
    17341734 * @return bool False on failure, true if success. 
    17351735 */ 
    17361736function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '') { 
    1737         // make sure meta is added to the post, not a revision 
    1738         if ( $the_post = wp_is_post_revision($post_id) ) 
    1739                 $post_id = $the_post; 
     1737        if ( ! apply_filters( 'wp_revisions_keep_meta', true ) ) { 
     1738                // make sure meta is added to the post, not a revision 
     1739                if ( $the_post = wp_is_post_revision($post_id) ) 
     1740                        $post_id = $the_post; 
     1741        } 
    17401742 
    17411743        return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value); 
    17421744} 
     
    17681770 */ 
    17691771function get_post_custom( $post_id = 0 ) { 
    17701772        $post_id = absint( $post_id ); 
    1771         if ( ! $post_id ) 
    1772                 $post_id = get_the_ID(); 
     1773        if ( ! apply_filters( 'wp_revisions_keep_meta', true ) ) { 
     1774                        if ( ! $post_id ) 
     1775                                $post_id = get_the_ID(); 
     1776        } 
    17731777 
    17741778        return get_post_meta( $post_id ); 
    17751779} 
  • wp-includes/revision.php

     
    6060} 
    6161 
    6262/** 
     63 * Saves post meta as part of a revision. 
     64 * 
     65 * Called immedately after revision restore, with wp_restore_post_revision hook 
     66 * 
     67 * @package WordPress 
     68 * @subpackage Post_Revisions 
     69 * @since 3.6.0 
     70 * 
     71 * 
     72 * @param int $post_id The ID of the post saved as a revision. 
     73 * @param int $revision_id The ID of the revision. 
     74 * @return false error, true if success. 
     75 */ 
     76function wp_restore_post_revision_meta( $post_id, $revision_id ) { 
     77        if ( ! apply_filters( 'wp_revisions_keep_meta', true ) ) 
     78                return false; 
     79 
     80        //revision the post format 
     81        $format = get_post_meta( $revision_id, '_revisioned_post_format', true); 
     82        if ( '' !== $format ) { 
     83                set_post_format( $post_id, $format ); 
     84                error_log('restoring ' . $format  ); 
     85                error_log('from ' . $revision_id); 
     86 
     87        } 
     88 
     89        $current_meta = get_post_meta( $revision_id ); 
     90        if ( is_array( $current_meta ) ) { 
     91                foreach ( $current_meta as $meta_key => $meta_value ) { 
     92                        update_post_meta( $post_id, $meta_key, $meta_value[0] ); 
     93                } 
     94        } 
     95        return true; 
     96 
     97} 
     98 
     99/** 
     100 * Saves post meta as part of a revision. 
     101 * 
     102 * Called immedately after revision storage 
     103 * 
     104 * @package WordPress 
     105 * @subpackage Post_Revisions 
     106 * @since 3.6.0 
     107 * 
     108 * 
     109 * @param int $post_id The ID of the post saved as a revision. 
     110 * @param int $revision_id The ID of the revision. 
     111 * @return false error, true if success. 
     112 */ 
     113function wp_save_post_revision_meta( $post_id, $revision_id ) { 
     114        // hook for 'wp_revisions_keep_meta', return false to disable revisioning for post met 
     115        if ( ! apply_filters( 'wp_revisions_keep_meta', true ) ) 
     116                return false; 
     117 
     118        if ( ! wp_first_revision_matches_current_version( $post_id ) ) 
     119                return false; 
     120 
     121        // list of post meta that should be excluded from revisioning 
     122        // filter 'revision_meta_do_not_copy' to allow exclusion of specific meta from revisioning 
     123        $exclude_meta_keys = apply_filters( 'revision_meta_do_not_copy', array( 
     124                '_encloseme', 
     125                '_pingme', 
     126                '_edit_last', 
     127                '_edit_lock', 
     128                '_revisioned_post_format', 
     129        ) ); 
     130 
     131        //revision the post format 
     132        if ( '' !== get_post_format( $post_id ) ) 
     133                update_post_meta( $revision_id, '_revisioned_post_format', get_post_format( $post_id ) ); 
     134 
     135        error_log('storing ' . get_post_format( $post_id ) ); 
     136        error_log('on ' . $revision_id); 
     137 
     138        $current_meta = get_post_meta( $post_id ); 
     139 
     140        if ( is_array( $current_meta ) ) { 
     141                foreach ( $current_meta as $meta_key => $meta_value ) { 
     142                        if ( in_array( $meta_key, $exclude_meta_keys ) ) 
     143                                continue; 
     144 
     145                                update_post_meta( $revision_id, $meta_key, $meta_value[0]); 
     146                        } 
     147 
     148        } 
     149        return true; 
     150} 
     151 
     152/** 
    63153 * Saves an already existing post as a post revision. 
    64154 * 
    65155 * Typically used immediately prior to post updates. 
     
    200290} 
    201291 
    202292/** 
    203  * Inserts post data into the posts table as a post revision. 
     293 * Inserts post data into the posts table as a post revision. Since 3.6 also stores post meta. 
    204294 * 
    205295 * @package WordPress 
    206296 * @subpackage Post_Revisions 
    207297 * @since 2.6.0 
    208298 * 
    209299 * @uses wp_insert_post() 
     300 * @uses wp_save_post_revision_meta() 
    210301 * 
    211302 * @param int|object|array $post Post ID, post object OR post array. 
    212303 * @param bool $autosave Optional. Is the revision an autosave? 
     
    221312        if ( !$post || empty($post['ID']) ) 
    222313                return; 
    223314 
     315        $post_id = $post['ID']; 
     316 
    224317        if ( isset($post['post_type']) && 'revision' == $post['post_type'] ) 
    225318                return new WP_Error( 'post_type', __( 'Cannot create a revision of a revision' ) ); 
    226319 
     
    228321        $post = wp_slash($post); //since data is from db 
    229322 
    230323        $revision_id = wp_insert_post( $post ); 
     324        if ( wp_first_revision_matches_current_version( $post_id ) ) 
     325                wp_save_post_revision_meta($post_id, $revision_id ); 
     326 
    231327        if ( is_wp_error($revision_id) ) 
    232328                return $revision_id; 
    233329 
  • wp-admin/revision.php

     
    2121        if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) 
    2222                break; 
    2323 
    24  
    2524        if ( ! $post = get_post( $revision->post_parent ) ) 
    2625                break; 
    2726 
     
    3332 
    3433        check_admin_referer( "restore-post_{$revision->ID}" ); 
    3534 
     35        wp_restore_post_revision_meta( $post->ID, $revision->ID  ); 
    3636        wp_restore_post_revision( $revision->ID ); 
    3737        $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) ); 
    3838        break;